Skip to main content

Ralsina.Me — Roberto Alsina's website

Posts about python (old posts, page 79)

PyCamp 2012: Day 2

Fin­ish­ing Day 2, here's the up­date.

https://p.twimg.com/AxO0roICMAAfLJd.jpg

That is one large spi­der, dude.

  • Woke up 10 time be­­cause David Lit­­vak does­n't know how to turn off his alar­m. Now hat­ing "Good Day Sun­shine" by The Bea­t­les. Sor­ry Ringo!

  • Learned about Cel­ery/Flask/Jug­ger­­naut. To­­mor­row will try to hack on the Niko­la serv­er idea us­ing that. Hugo Rus­c­it­ti al­ready did a lot of work!

  • Helped Martín Gaitán do Niko­la gallery im­prove­­ments (look­ing much nicer now!)

  • Im­­ple­­men­t­ed code list­ings for Niko­la

  • Had a huge spi­der walk up my leg.

  • Had asa­­do for din­n­er!

  • Played with re­­mote con­trolled cars.

  • Saw a guy jug­­gle while rid­ing a mono­­cy­­cle

  • Played in the ping pong tour­­na­­ment (record 1-1, out in the group phase)

  • Fixed a bunch of bugs that popped while im­­ple­­men­t­ing stuff.

To­mor­row: will hack all day in the niko­la host­ing idea.

New Nikola Feature: code listings

This is a new fea­ture in Niko­la, my stat­ic web­site and blog gen­er­a­tor.

It's aimed at show­ing pieces of files in the post­s, and giv­ing you a link to the full file, does rea­son­able syn­tax high­light thanks to pyg­ments, and the syn­tax for em­bed­ding in your posts is not ex­ces­sive­ly aw­ful, so I can use it for some of my tu­to­ri­al / book project­s.

Here's an ex­am­ple:

.. listing:: md.py python
   :start-at: def compile_html
   :end-before: output =

Sys­tem Mes­sage: ER­ROR/3 (<string>, line 14)

Er­ror in "list­ing" di­rec­tive: un­known op­tion: "s­tart-at".

.. listing:: md.py python
    :start-at: def compile_html
    :end-before: output =

This is not merged in­to mas­ter yet, but should be soon.

PyCamp Day 1

Go­ing to sleep, so here's a quick run­down of my 1st day at Py­cam­p:

  • Woke up at 6AM, and af­ter tak­ing train­s, bus­es and au­­to­­mo­­biles, ar­rived around noon. Place is nice, wheather is cold. Beds are bunks.

  • Pre­sen­t­ed ideas, vot­ed work­ing slots

  • Im­­ple­­men­t­ed a Niko­la fea­­ture to get themes from http://­­bootswatch.­­com

  • Im­­ple­­men­t­ed first draft of pipe­­lines for post-pro­cess­ing gen­er­at­ed files

  • Martín Gaitán is work­ing on im­prov­ing the im­age gal­­leries

  • Hugo Rus­c­it­ti is do­ing some cel­ery+flask mag­ic to cre­ate a Niko­la host­ing ser­vice

  • Had fun with lots of oth­­er things and talk­ing with a lot of peo­­ple.

  • Played some ta­ble ten­­nis (won 1, lost 1)

  • Got a fire­­fox t-shirt

  • Got a Nin­­ja-IDE mug that changes colour with tem­per­a­­ture.

Now, ex­haust­ed, go­ing to bed.

Nikola Ideas for PyCamp

This fri­day is the be­gin­ning of Py­Cam­p, four days of python hack­ing with­out dis­trac­tion or pause. And I want to code a lot. My main tar­get is fea­tures for Niko­la my stat­ic blog gen­er­a­tor.

If you are at­tend­ing Py­Camp (or even if you are not), you are wel­come to join me in im­ple­ment­ing these in a marathon of kick­ass cod­ing start­ing this fri­day and last­ing all week­end.

I have a few ideas in my head, but I want more. These are the ones I have, please add more in the com­ments if you have any:

Code Gallery

Like im­age gal­leries but for code. Put code in a fold­er and it will be beau­ti­ful­ly dis­played. With the ad­di­tion of a "list­ings" do­cu­tils di­rec­tive, it will make show­ing code in de­tail and in con­text easy and pow­er­ful, and make Niko­la more at­trac­tive to pro­gram­mer-blog­ger­s.

Gallery Polishing

Im­age gal­leries are im­ple­ment­ed and work, but they could use a lot of pol­ish. From mak­ing them more net­work-­ef­fi­cien­t, to im­age RSS feed­s, re­cur­sive gal­leries, gallery meta­data, im­age texts, and much more.

File Pipelines

Want to min­i­mize your CSS? Tidy your HTM­L? pngcrush your im­ages? ap­ply HTML trans­for­ma­tion­s? Oth­er things I can't imag­ine?

File pipe­lines would bring the pow­er of the unix shell to a site gen­er­a­tor, let­ting you con­nect lego-­like fil­ter­s, some pro­vid­ed, some from the com­mu­ni­ty, in­to a pow­er­ful ma­chin­ery.

Online Editing (Alva)

While stat­ic site gen­er­a­tors have lots of ben­e­fit­s, they have one sig­nif­i­cant down­sid­e: you ed­it the files in your own de­vice. A on­line ed­i­tor for Niko­la lets you ed­it them through a web in­ter­face for blog­ging-from-ay­where good­ness.

Nikola Hosting (Shoreham)

Why not cre­ate a ser­vice where the us­er feeds posts to a serv­er and then the serv­er pub­lish­es them? The feed­ing can be via a DVC­S, or a file sync ser­vice, or via on­line ed­i­tors, and the out­put is pub­lished au­to­mat­i­cal­ly or at the push of a but­ton.

Drafts

I don't do draft­s. I type and that's it. But oth­ers pre­fer more cau­tious and sane ap­proach­es. So, how should drafts work? While the fea­ture may be easy to im­ple­men­t, it's a good be­gin­ner pro­gram­mer's task, where you have to think more about what you want to achieve and pro­vid­ing a good us­er ex­pe­ri­ence than about just bang­ing code.

So, is there some­thing you saw in an­oth­er stat­ic blog gen­er­a­tor and Niko­la lack­s? Any cool ideas and want a friend­ly code­base to hack them on? Do you have any crazy ideas noone would touch with a ten-­foot-pole but you think would be awe­some to have?

Well, now's a good time to talk about it!

Python is Not a Configuration File Format

There is a large thread in red­dit about us­ing Python as con­fig­u­ra­tion file for­mat. I want to be clear about that:

DON'T DO THAT, UN­LESS YOU HAVE A VERY GOOD REA­SON.

If you need to ask if it's a good idea, then you don't have a good rea­son. If you are sure that you have a good rea­son, then maybe you have a good rea­son.

There are many rea­sons for it, but I will ex­plore just two, then of­fer a sug­ges­tion.

Python is read­-on­ly, and con­fig­ur­ing is not pro­gram­ming.

Sure, it's easy to use python as a con­fig file. You just im­port the thing, and there you go, all the da­ta is there. But now your con­fig­u­ra­tion syn­tax is a gen­er­al pur­pose lan­guage that can do things like pop up di­alogs when you parse it.

Your con­fig can now de­pend on the whole in­ter­net, the hard­ware, the weath­er, and in­ter­ac­tive in­put. Pow­er­ful? Sure. Good idea? May­be, some­times. But your ap­pli­ca­tion is now not able to con­fig­ure it­self.

If your ap­pli­ca­tion wants to store any kind of set­ting, it won't be able to. So most in­ter­ac­tive, desk­top app­s, just should not use python for this, ev­er.

But what about non-in­ter­ac­tive tool­s? Well, us­ing python means that oth­er tools can't write to the con­fig file, ei­ther, which makes the tool less pow­er­ful. The pow­er to have tools use tools is one of the cor­ner­stones of mod­ern com­put­ing, and you just cut your app off that ecosys­tem. De­pend­ing on what lan­guage the tool us­es it may not even be able to parse your con­fig file.

And what hap­pens when some­one is told "use this con­fig frag­ment to achieve X"? Well, odds are, if the re­cip­i­ent has done any­thing that takes ad­van­tage of us­ing python as a con­fig for­mat, then the frag­ment will not work. It would be like do­ing copy­/­paste from ran­dom code in github in­to your own pro­gram and ex­pect­ing it to work.

So, you can't write to it from the ap­p, you can't get con­fig­u­ra­tion tips from the in­ter­net, you can't use oth­er tools to mod­i­fy con­fig files, and oth­er tools have a hard time pars­ing your files.

Al­so, it means that to han­dle the gen­er­al case of con­fig­ur­ing your ap­p, you need a pro­gram­mer. That is al­most cer­tain­ly overkil­l. Very few apps need that kind of thing. If your app can on­ly be con­fig­ured by pro­gram­mer­s, you may have failed at mak­ing a good app (ex­cep­tions ex­ist).

And what's the ad­vice? Well, the ad­vice is "don't do that" and the corol­lary is "con­fig­ure us­ing data, not code". use IN­Is, or XM­L, or YAM­L, or JSON, or plain text files, or what­ev­er. But not code.

PS: My lat­est pro­jec­t, Niko­la us­es python as a con­fig­u­ra­tion lan­guage. I thought I had a good rea­son. I did­n't.


Contents © 2000-2020 Roberto Alsina