Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Programar no es un objetivo..

Hi­ce unas pre­gun­tas y res­pues­tas el otro día, y una de las pre­gun­tas fue "Co­mo salir del eterno ha­go pro­yec­to / co­dea­ca­de­my a co­sas más in­te­re­san­tes?" ... no es­toy 100% se­gu­ro de lo que sig­ni­fi­ca, pe­ro lo voy a to­mar co­mo una opor­tu­ni­dad pa­ra ran­tear so­bre al­go que me im­por­ta y que es­tá (me pa­re­ce) va­ga­men­te co­nec­ta­do.

Tal vez te sien­tas co­mo que es­tás atra­pa­do en un ci­clo de apren­der al­go, usar­lo en un pro­yec­to de ju­gue­te y des­pués ... ¿qué? ¿a­pren­dés otra co­sa? ¿Y ha­cés otro pro­yec­ti­to? ¿Y se­guís así?

¿Y sen­tís que eso ca­re­ce de sig­ni­fi­ca­do y no te da sen­sación de lo­gro, no te mo­ti­va y en ge­ne­ral que es­tás con­de­na­do a ser un new­bie pa­ra siem­pre?

Bue­no, si es así ... cu­chá, cu­chá ...

Tus proo­yec­tos de ju­gue­te se sien­ten in­sig­ni­fi­can­tes por­que no son rea­le­s.

¿E­sa sen­sació­n? Es tu pro­gra­ma­dor in­te­rior di­cién­do­te que te de­jes de pa­vear y em­pie­ces de una vez por to­das a pro­gra­mar en se­rio. Y te voy a dar un plan pa­ra que lo ha­ga­s.

PASO 1: Buscá algo que querés que tu compu haga pero que tu compu no hace.

¿Que­rés que tus vi­deos de you­tu­be apa­rez­can en tu blog?

¿Que­rés sa­ber cuán­tos Ro­ber­tos na­cie­ron en 1934 en Ar­gen­ti­na?

Bue­no, ami­go ima­gi­na­rio, des­pués de en­con­trar al­go así, po­dés pa­sar al pa­so 2.

Su­pon­ga­mos por aho­ra que de­ci­dis­te im­ple­men­tar "u­na co­sa" que es­pan­te los pa­ja­ri­tos que te des­pier­tan ca­da ma­ña­na en es­ta eter­na pe­s­adi­lla en la que to­dos vi­vi­mos de aho­ra en más pa­ra siem­pre.

PASO 2: Decidí algunos detalles básicos de tu meta

Es­to se lla­ma un pro­yec­to. Im­ple­men­tar al­go­rit­mos de or­de­na­mien­to no es un pro­yec­to, es un ejer­ci­cio. Im­ple­men­tar la ver­sión 200 de un chat usan­do web­so­cke­ts pa­ra tu "por­tfo­lio" no es un pro­yec­to, es so­la­men­te un apén­di­ce abu­rri­do de tu cu­rrí­cu­lu­m.

Un pro­yec­to es una me­ta. Un pro­yec­to es "¡­Quie­ro que mi com­pu ha­ga ES­TO y en el sagra­do nom­bre de Mar­cos Mun­d­s­to­ck, voy a ha­cer el es­fuer­zo pa­ra obli­gar­la!"

En­ton­ce­s, quie­ro al­go que cuan­do de­tec­ta pá­ja­ros can­tan­do ha­ga rui­do pa­ra es­pan­tar­lo­s.

  1. Es­cu­cha bus­can­doo rui­do­s.
  2. De­ci­de si son rui­dos pa­ja­res­co­s.
  3. Res­pon­de con un rui­do des­agra­da­ble pa­ra em­plu­ma­do­s.

PASO 3: Convencéte de que es una cosa que una compu puede hacer.

Por­que bue­no, las com­pus pue­den ha­cer mu­chas co­sas, pe­ro no pue­den ha­cer to­do. En­ton­ce­s, hay que ha­cer un rá­pi­do "rea­li­ty che­ck". Rá­pi­do, por­que no que­re­mos per­der más de me­dia ho­ra en es­to y por­que no es lo im­por­tan­te.

  • ¿Las com­pus pue­den es­cu­char so­ni­do­s? ✔
  • ¿Las com­pus pue­den ha­cer rui­do? ✔
  • ¿Los so­ni­dos es­pan­tan pá­ja­ro? ✔
  • ¿Pue­de una com­pu de­ci­dir si un rui­do es un pá­ja­ro o no? ... ¿ca­paz que sí? Las he vis­to ha­cer co­sas más ra­ra­s.

PASO 4: Encontrar un mecanismo semi-coherente para implementarlo.

Pue­de ser muy va­go. Ti­po "sí, pue­do usar es­ta API de Google y es­te tra­po re­ji­lla vie­jo­". Una va­ga idea.

  • Im­ple­men­tar al­go que es­cu­che rui­do­s.
  • Al­go en el me­dio que de­ci­da si un rui­do es de un pá­ja­ro
  • Que la de­tec­ción de rui­do "dis­pa­re" otro có­di­go
  • Có­di­go que ha­ga rui­do

PASO 5: Describir la versión más estúpida que puedas imaginar

¿Que­re­mos ha­cer un de­tec­tor de pá­ja­ro­s? Em­pe­ce­mos con un de­tec­tor de rui­do­s.

O más bien, bus­que­mos al­go que pue­da reac­cio­nar cuan­do tu mi­cró­fono de­tec­ta rui­do­s. O aun­que sea una bi­blio­te­ca que te de ac­ce­so a tu mi­cró­fono.

  • Bus­car una bi­blio­te­ca pa­ra leer so­ni­do del mi­cró­fono
  • De­tec­tar rui­do
  • Bus­car bi­blio­te­ca pa­ra ha­cer rui­do
  • Ha­cer rui­do
  • Co­nec­tar las dos mi­ta­des

PASO 6: Poné el culo en la silla e implementá la versión estúpida

Ha­cé­lo RÁ­PI­DO. Si pla­neás de­ma­sia­do no vas a ha­cer más que pla­near mu­cho. Que­rés ser un pro­gra­ma­do­r, no un PM. Me pre­gun­to co­mo se­ría la ver­sión PM de es­te ran­t.

PASO 7: Mostrále la versión estúpida a alguien que respetes y escuchá.

Si, es­ta par­te de mie­di­to, pe­ro pro­gra­mar es, en gran par­te, acer­ca de per­so­na­s. Mos­trar­le co­sas a per­so­na­s, es­cu­char a per­so­na­s, en­ten­der que es lo que esas per­so­nas real­men­te es­tán tra­tan­do de de­ci­r, y co­sas así.

Así que: mos­trá­se­lo a al­guien. Es­cu­chá. To­má de­ci­sio­nes acer­ca de si hi­cis­te lo co­rrec­to en los pa­sos 3 y 4. Tal vez ajus­tá un po­co tu ob­je­ti­vo.

PASO 8: repetir pasos 5 a 7 con una versión ligeramente menos idiota

Re­pe­tir has­ta que lle­gues a al­go que no te­nés idea de co­mo ha­ce­r. En es­te ca­so pro­ba­ble­men­te sea "de­ci­dir si eso es un pá­ja­ro­".

PASO 9: buscá ayuda

Pre­gun­t;a. De nue­vo: pro­gra­mar es ma­yor­men­te acer­ca de gen­te. En es­te ca­so, vas a prac­ti­car "pe­dir ayu­da". No que­rés que te di­gan có­mo se ha­ce (o ca­paz que sí?) pe­ro es­te es un pa­so crí­ti­co.

Po­dés ter­mi­nar en va­rios es­ce­na­rio­s.

  1. Lo re­sol­vis­te.
  2. De­ci­dis­te que es im­po­si­ble.
  3. Es po­si­ble pe­ro no te­nés idea có­mo.

¡Si lo re­sol­vis­te, no hay pro­ble­ma! Vol­vé al pa­so 5 y se­guí has­ta que es­tés con­for­me con el pro­yec­to y apren­dis­te al­go nue­vo. ¡Fe­li­ci­ta­cio­nes!

Los otros dos es­ce­na­rios te lle­van a ...

PASO 10: trabáte

Si de­ci­dis­te que es im­po­si­ble, en­ton­ces apren­dis­te so­bre un pro­ble­ma que es, en es­te mo­men­to al me­no­s, im­po­si­ble. Da­do que sos nue­vo en es­ta cla­se de co­sas, es im­pro­ba­ble que vos lo arre­gle­s, pe­ro ... si real­men­te te in­te­re­sa es­te pro­yec­to, tal vez te in­di­que un nue­vo ti­po de csas que te in­te­re­se apren­de­r.

¿No po­de­mos de­ci­dir si un rui­do es un pá­ja­ro? ¿Por qué? ¿Hay gen­te in­ves­ti­gan­do eso? ¿Co­n, po­né­le, Ma­chi­ne Lear­nin­g? Sue­na in­te­re­san­te ... nor­mal­men­te los ejem­plos son con imá­ge­nes. ¿Hay tra­ba­jos in­te­re­san­tes pa­ra apli­car­lo a au­dio? ¿Hay bi­blio­te­cas ya he­cha­s? ¿Hay da­ta se­ts? ¿Hay tu­to­ria­le­s? Y aho­ra te­nés al­go nue­vo pa­ra es­tu­dia­r. Di­vertí­te.

El ter­cer es­ce­na­rio es el com­pli­ca­do. Di­ga­mos que se pue­de ha­cer con ML y que hay da­ta­se­ts de so­ni­dos ur­ba­nos y de can­tos de pá­ja­ro y que sa­bés que se pue­de ha­ce­r, y en­ten­dés un po­qui­to del te­ma, pe­ro vos no sa­bés ha­cer­lo.

Bue­no, fe­li­ci­ta­cio­nes, has lle­ga­do al lí­mi­te ac­tual de tu in­com­pe­ten­cia, to­do lo que te­nés que ha­cer es achi­car­la un po­co. Y así es la vi­da de un pro­gra­ma­do­r.

¿Entonces, como te ayuda todo este laburo?

Es­tás apren­dien­do co­sas dis­tin­tas que cuan­do ha­cías ejer­ci­cio­s.

  • Apren­dés a de­ci­dir qué ha­ce­r.
  • Apren­dés a pe­dir ayu­da.
  • Apren­dés a pre­sen­tar tu tra­ba­jo an­te otro­s.
  • Apren­dés a pro­ce­sar fee­dba­ck.
  • Apren­dés a in­ves­ti­gar tu es­pa­cio de pro­ble­ma­s.
  • Apren­dés a par­tir un pro­yec­to en ta­reas
  • Apren­dés a to­mar de­ci­sio­nes.

Y sí, po­dés apren­der una o dos co­sas de pro­gra­ma­ció­n.

Y tal vez (pe­ro es im­pro­ba­ble) es­pan­tes esos pá­ja­ros de mier­da.

PD: http­s://­gi­thu­b.­co­m/ka­rol­pi­czak/­BA­DC-2017

¿Es todo muy difícil, no?

Es difí­cil lev­an­tarse, es difí­cil labu­rar, es difí­cil parar de labu­rar, es difí­cil des­cansar, es difí­cil dormir, es difí­cil coci­nar, es difí­cil pedirle al otro que cocine, es difí­cil no coci­nar y pedir de­liv­ery, es difí­cil salir a hac­er las com­pras, es difí­cil no salir, es difí­cil ir a la ter­raza, es difí­cil la re­unión por zoom, es difí­cil con­cen­trarse, es difí­cil pro­gra­mar, es difí­cil hac­er videos, es difí­cil leer, es difí­cil es­cuchar músi­ca, es difí­cil dis­traerse, es difí­cil el chat del laburo, es difí­cil el chat de amigos, es difí­cil twit­ter, es difí­cil el noticiero, es difí­cil es­cribir, es difí­cil.

Una semana usando tiling windows.

Ha pa­sa­do un po­co más de una se­ma­na des­de que de­ci­dí usar un ti­ling win­dow ma­na­ger "en se­rio­".

Cla­ro, es­toy ha­cien­do un po­qui­to de tram­pa por­que es­toy usan­do KDE más Kröhnki­te pe­ro mis ven­ta­nas ha­cen mo­sai­cos y me gus­ta.

Por qué es­to y no i3 u otra co­sa? Por­que no quie­ro cam­biar mi es­ti­lo de vi­da, na­da más quie­ro que mis ven­ta­nas no se so­la­pen to­do el tiem­po.

Kröhnki­te me da su­fi­cien­te fun­cio­na­li­dad "ti­lin­g" que ob­ten­go (creo) los be­ne­fi­cios sin el ma­si­vo des­pe­lo­te de aban­do­nar to­das las co­sas de mi es­cri­to­rio a las que es­toy acos­tum­bra­do. To­da­vía uso la te­cla Win­do­ws (o­k, ok, la te­cla "Me­ta") pa­ra lan­zar app­s, si­go te­nien­do un pa­nel de plas­ma con plas­moi­des en la par­te de aba­jo de mi mo­ni­to­r. ¡Pue­do ha­cer que las ven­ta­nas flo­ten si quie­ro! Pue­do usar la ma­yo­ría de los ata­jos de te­cla­do de mis 24 años usan­do KDE (sí, en se­rio) etc.

¿Cuá­les co­sas tu­ve que cam­biar pa­ra adap­tar­me?

  • Tu­­ve que pa­sar a fo­­­cus-­­fo­­­llo­­ws-­­mou­­se. PE­­RO por pri­­me­­ra vez des­­de que em­­pe­­cé a usar FVWM en 1993 me gus­­ta más que cli­­ck-­­to­­-­­fo­­­cus. Re­­su­l­­ta que la im­­ple­­men­­ta­­ción de KDE es­­tá bue­­­na y bá­­si­­ca­­men­­te "ha­­ce lo que uno quie­­re". Co­­­mo di­­ce en la do­­­cu­­men­­ta­­ció­­n, "es co­­­mo cli­­ck to fo­­­cus, pe­­ro no ha­­cés cli­­ck".

  • Sa­­qué las de­­co­­­ra­­cio­­­nes de las ven­­ta­­na­s. Sí, se pue­­den de­­ja­­r, pe­­ro se ve ra­­ro.

  • Pu­­se bo­r­­des más grue­­so­­s. Ca­m­­biar el ta­­ma­­ño de las ven­­ta­­nas con el te­­cla­­do no es­­tá bue­­­no, así que los bo­r­­des más grue­­sos ayu­­dan.

¿Cuá­les co­sas me gus­ta­ro­n?

  • Te­­ner la­­yout ti­­ling en un mo­­­ni­­tor y floa­­ting en el otro es­­tá muy bue­­no cuan­­do se ne­­ce­­si­­ta. Y lo pue­­do ac­­ti­­var o des­a­c­­ti­­var con una te­­cla. En ge­­ne­­ra­­l: la­­you­­ts di­­ná­­mi­­cos y se­­pa­­ra­­dos por pan­­ta­­lla son mu­­y, muy úti­­le­s.

  • Te­­ner un WM "ti­­li­n­­g" pe­­ro que to­­­da­­vía res­­pe­­ta las co­n­­ven­­cio­­­nes de la ma­­yo­­­ría de los WMs es­­tá bue­­no. Los po­­­pups flo­­­tan, ok?

  • El ata­jo Al­t+En­ter pa­ra ha­cer que una ven­ta­na sea la "im­por­tan­te" es­tá ge­nia­l.

  • Me en­­can­­ta co­­­mo ma­­ne­­ja ma­­xi­­mi­­za­­ció­­n/­­mi­­ni­­mi­­za­­ció­­n.

¿Cuá­les co­sas no me gus­ta­ro­n?

  • El la­­yout "ti­­le­­d" tie­­ne múl­­ti­­ples ve­r­­sio­­­nes que se ca­m­­bian con Ctr­­l+I/D ... y a ve­­ces ni­n­­gu­­na es exa­c­­ta­­men­­te lo que quie­­ro? Ta­m­­bién sue­­le pa­sar que las mas "a­l­­ta­s" no pa­­re­­cen ha­­cer na­­da, pro­­­ba­­ble­­men­­te po­r­­que no ten­­go su­­fi­­cien­­tes ven­­ta­­nas en el mo­­­sai­­co.

  • Ya que no ten­go de­co­ra­cio­nes en las ven­ta­na­s, la in­con­sis­ten­cia bru­tal acer­ca de cual es el ata­jo pa­ra ce­rrar una apli­ca­ción es muy mo­les­to. Pue­de ser ctr­l+q o ctr­l+x o esc o nin­guno de ello­s. Ter­mino ha­cien­do al­t+­f4 que se sien­te co­mo Win­do­ws 3.11

  • La ex­­pe­­rien­­cia de scri­p­­ts pa­­ra KWin no es pe­r­­fe­c­­ta. In­s­­ta­­lé otro ha­­ce un tie­m­­po, lla­­ma­­do Qua­r­­te­­r-­­Ti­­li­n­­g, y lo de­­sin­s­­ta­­lé, ha­s­­ta do­n­­de sé no hay ra­s­­tros de él en mi sis­­te­­ma ... ex­­ce­p­­to por sus ata­­jos de te­­cla­­do, que van a en­­su­­ciar mi diá­­lo­­­go de ata­­jos pa­­ra sie­m­­pre.

El ex­pe­ri­men­to con­ti­núa!

Using scripts to update my personal site.

These last few days I have been adding code in Niko­la to give it a more use­ful Python API. I added scripts then I start­ed a PR that lets you mod­i­fy posts pro­gram­mat­i­cal­ly.

Why?

Be­cause my site has 20 years of bag­gage. Which means ev­ery bad idea in the my 20 year his­to­ry of do­ing my own blog soft­ware is lurk­ing in it some­where.

For ex­am­ple, when Niko­la got start­ed, it had (it still has it!) sup­port for what I called "meta files". Ba­si­cal­ly, you put your post's con­tent in a file, say "my­post.tx­t" and you added things like the date, the ti­tle, tags and so on in "my­post.meta", which was the metafile.

That was good in that it was a way to quick­ly get it work­ing with­out wor­ry­ing about how to ex­tract meta­da­ta from source files, and to keep source files com­pat­i­ble with oth­er toolchain­s, like do­cu­til­s' or nor­mal mark­down.

BUT, then we added ways to have metadata in the files and keep them compatible. But I still had 1500 metafiles in my site. And getting rid of them would involve some sed some python and some pain, so I never upgraded the posts to the newer format.

Un­til now.

two_post_files = [p for p in site.timeline if p.is_two_file]

for p in two_post_files:
    p.is_two_file = False
    print(p.title())

What is that? Well, it filters the site.timeline and finds all the things that are in two files using the is_two_file property, and then makes them not be two files.

What is the re­sult?

$ git diff --stat 766d8e1c5dd495d4aa7e27bb0b7f6b2c62c6aa63 | tail -1
 3739 files changed, 20521 insertions(+), 7381 deletions(-)

Of course my site is under git, I would not dare do this without it. And hey, no more .meta files!


Contents © 2000-2024 Roberto Alsina