Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

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

Marave 0.1 liberado, necesita testers!

¿Qué es Ma­ra­ve?

Ma­ra­ve es un edi­tor que no te dis­trae. Tie­ne una in­ter­faz de pan­ta­lla com­ple­ta, y la ma­yor par­te del tiem­po, mien­tras es­cri­bís, se ve só­lo tu tex­to, y tal vez un fon­do.

marave1

Por su­pues­to que es bas­tan­te con­fi­gu­ra­ble:

marave2

Al­gu­nos de los fea­tu­res:

  • Fo­n­­dos pe­r­­so­­­na­­li­­za­­dos (i­­má­­ge­­nes o co­­­lo­­­res)

  • Ti­­po­­­gra­­fía co­n­­fi­­gu­­ra­­ble

  • El edi­­tor pue­­de ca­m­­biar de ta­­ma­­ño po­­­si­­ción u opa­­ci­­da­­d.

  • In­­te­r­­faz "des­­va­­ne­­cien­­te", cuan­­do es­­cri­­bís, to­­­do des­a­pa­­re­­ce.

  • Mú­­si­­ca op­­cio­­­nal (por aho­­­ra apun­­ta a strea­­ming de au­­dio, tal vez pro­n­­to soun­­d­s­­ca­­pes)

  • Op­­cio­­­nal fee­­dba­­ck de au­­dio de te­­cla­­do (por si ex­­tra­­ñas la Oli­­ve­­tti)

  • So­­­po­r­­ta te­­mas

  • Co­­­rre­c­­tor or­­to­­­grá­­fi­­co mu­l­­ti­­li­n­­güe (re­­quie­­re pyen­­chan­­t)

Ma­ra­ve es­tá im­ple­men­ta­do usan­do Py­Q­t, por lo que de­be­ría fun­cio­nar en to­das las pla­ta­for­mas prin­ci­pa­les de es­cri­to­rio, Win­do­ws, Li­nux y Mac OS­X, mien­tras ten­gas Py­Qt ins­ta­la­do.

En el fu­tu­ro, bi­na­rios sen­ci­llos de uti­li­zar se pro­vee­rán pa­ra Win­do­ws y Ma­c.

Es­ta ver­sión no es­tá com­ple­ta. Es­pe­cí­fi­ca­men­te:

  • Bus­­ca­­r+­­Ree­m­­pla­­zar no fun­­cio­­­na

  • Pue­­de ha­­ber co­n­­fi­­gu­­ra­­cio­­­nes no im­­ple­­men­­ta­­das

Des­car­ga Ma­ra­ve 0.1

OJO! 0.2 dis­po­ni­ble, en http://­co­de.­google.­co­m/­p/­ma­ra­ve/­do­wn­load­s/­list

Apple's iPad is a sad, sad thing.

Eve­r­y­thing I wi­ll say he­re was pro­ba­bly be­tter said by Ma­rk Pil­grim <h­ttp://­di­vein­to­ma­rk.or­g/ar­chi­ve­s/2010/01/29/­ti­nke­rer­s-­sun­se­t> but what the he­ck, le­t's gi­ve it a sho­t.

He­re's wha­t's wrong wi­th the iPa­d: it su­cks for me.

Be­fo­re an­yo­ne sa­ys "do­n't buy it then!" I'­ll say it firs­t: I do­n't in­tend to buy one.

I thi­nk the­re is a pla­ce for iPa­ds and it would go agains most of my be­lie­fs to say it should­n't exis­t, but I al­so ex­pect it to make our world poore­r, if it's po­pu­lar enou­gh.

Yes it's hos­ti­le to ti­nke­rin­g. Ye­s, to read about tha­t, see Ma­rk Pil­gri­m's arti­cle, he's a mu­ch be­tter wri­ter than I.

I on­ce pos­ted the READ­ME fi­le for a pie­ce of so­ftwa­re ca­lled Atlas­t. It said things like "make eve­r­y­thing pro­gra­m­ma­ble" and "[It is] far be­tter to in­vest the effort up front to crea­te a pro­duct fle­xi­ble enou­gh to be adap­ted at wi­ll, by its user­s, to their im­me­dia­te nee­d­s."

The iPad and most other Apple pro­duc­ts are the an­ti­the­sis of tha­t. They are pro­duc­ts meant to be exac­tly as they are, and tha­t's all they are goint to be. If you want to chan­ge the way it ac­ts, you need to pay and be sub­ject of Apple's whi­m, or "break in­to" your own de­vi­ce.

That hur­ts me. I see peo­ple gi­ve up even the po­s­si­bi­li­ty of chan­ging what a (le­t's say it) pre­tty, use­fu­l, po­wer­ful de­vi­ce is ca­pa­ble of, just be­cau­se they do­n't what that free­do­m. I can un­ders­tand that fro­m, sa­y, a us­ed car sa­les­man, or whate­ve­r, so­meo­ne wi­thout any in­cli­na­tion for that cra­ft.

But I see freaking pro­gra­m­mers bu­ying apple ki­t. And I see them ha­ppy wi­th their iPho­nes and iPo­ds and (soon, su­re­l­y) iPa­d­s, bu­ying apps from the on­ly sour­ce ena­bled to se­ll the­m, bu­ying the apps that are allo­wed by a sin­gle par­ty, that de­ci­des, he­y, this app? you wo­n't need it!

I see them and I say to mysel­f, du­de, that thing you hold in your hand is mo­re po­wer­ful than an­y­thing we had 10 years ago, the­re must be so­me­thing cool you could do wi­th it that noone el­se is doin­g.

Wha­t's the vi­sion a pro­gra­m­mer has of his fu­tu­re if he en­dor­ses Apple's clo­sed ki­t? A fu­tu­re whe­re he can pro­gram so­me­thing on­ly if Apple appro­ve­s? A fu­tu­re whe­re a "rea­l" com­pu­ter is a SDK for the things "real peo­ple" use in their eve­r­y­day li­fe­s?

What is wrong wi­th you? What ha­ppe­ned to you? Are you now the kind of guy tha­t's just ha­ppy wi­th what he's gi­ven? Are you now a freaking uti­li­ta­rian? Are you old no­w?

Ha­ve you no­ti­ced the trend in Apple's new pro­duc­ts is to­war­ds le­ss con­trol by the use­r? First it was just handhel­d­s, now the­re's a ta­ble­t. What was the last new in­te­res­ting Apple pro­duct that was­n't lo­cked up?

He­re they had a de­vi­ce whi­ch could ha­ve OSX or Ipho­ne OS, and they went wi­th Ipho­ne OS. The­re is a rea­son for tha­t: it makes them mo­re mo­ne­y.

For OS­X, they make mo­ney of the har­dwa­re, the OS upgra­des, and so­me app­s. On the iPa­d, they make mo­ney eve­ry ti­me you buy any app, eve­ry ti­me you buy a book to read in it, eve­ry ti­me you use 3G wi­th the pre­paid plan, and I am su­re they are going to find other wa­ys too.

And wha­t's the key to making mo­ney that wa­y? Con­tro­l. If they had no ex­clu­si­ve con­trol of the App sto­re, they lo­se a sour­ce of re­ve­nue. If they allo­wed for ea­sy de­ve­lo­p­ment of ho­bby app­s, they would lo­se re­ve­nue. If they could let you re­pla­ce the freaking ba­tte­r­y, they would lo­se re­ve­nue.

And if the­re's one thing com­pa­nies ha­te is lo­sing re­ve­nue. Apple saw two pa­ths ahea­d, one lea­ding to hu­ge mo­ne­y, the other to just big mo­ne­y. They ha­ve taken the hu­ge mo­ney pa­th, and it's wo­rking for the­m. They are not going ba­ck.

If eve­r­yo­ne goes along for the ri­de, it wi­ll be a sad thin­g.

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.

1

Ejer­ci­cio pa­ra el lec­to­r.


Contents © 2000-2020 Roberto Alsina