Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Publicaciones sobre nikola (publicaciones antiguas, página 18)

Making my site FAST

My site is cre­at­ed us­ing a tool I start­ed and on which I have put a ton of ef­fort over the last 10 years or so, called Niko­la, which is a stat­ic site gen­er­a­tor (SS­G).

One of the sell­ing points of SS­Gs is that the pro­duced sites are fast and I have al­ways tak­en care to check, ev­ery once in a while, that my site was fast ... but not late­ly. And when I checked on Google Page­Speed In­sights I was hor­ri­fied to see it scor­ing 20 points out of 100.

So, I start­ed to see what the heck had hap­pened.

Google PageSpeed HATES Youtube

Each em­bed­ded video is seen as 4MB of block­ing things load­ing and mak­ing your page suck.

So­lu­tion: de­fer load­ing them us­ing http­s://github.­com/­group­board­/yt­de­fer

Bundling things still works

It has been years since it was promised that bundling mul­ti­ple CSS files in­to a large one or merg­ing mul­ti­ple JS files in­to a sin­gle script would not be worth it.

Well, ac­cord­ing to Page­Speed, it's still worth it. Luck­i­ly Niko­la has good sup­port for it, so I made sure EV­ERY­THING was bun­dled. That al­so in­volved get­ting some things off CDNs and in­to my as­sets fold­er:

  • pris­mjs
  • jquery

Google fonts are SLOW

Like, 400ms for two fonts. So, you can self­-host them us­ing http­s://­google-web­fonts-helper.herokuap­p.­com/­fonts


  • use font-display: swap
  • preload the fonts using something like <link rel="preload" href="/assets/fonts/pt-serif-v11-latin-regular.woff2" as="font">

Check CSS for @import

Even after bundling them, if a CSS file uses @import that will still be a separate request.

Check compression and caching

Make sure your web serv­er is do­ing the right things there.

Remove useless stuff

I was load­ing font-awe­some for ONE ICON. There, gone.

Did it work?

Now the score hov­ers around 96 to 98 so, yes it did. And in­deed the page feels very, very snap­py.

New Nikola Plugin: rst code blocks using prism.js

I have been writ­ing some of my posts us­ing Mark­down late­ly. And not even plain old Python Mark­down, but mis­a­ka which is an al­ter­na­tive im­ple­men­ta­tion based on Hoe­down

So, I no­ticed that those mark­down files had no syn­tax high­light­ing! I looked and Mis­a­ka does of­fer some­thing to "high­light things". Here is what it does:

<code class="language-python">
def f():

No class­es in the el­e­ments, no noth­ing, just a class in the code el­e­men­t! It turns out that is the rec­om­mend­ed way to in­di­cate you are show­ing code:

There is no for­mal way to in­di­cate the lan­guage of com­put­er code be­ing marked up. Au­thors who wish to mark code el­e­ments with the lan­guage used, e.g. so that syn­tax high­light­ing scripts can use the right rules, can use the class at­tribute, e.g. by adding a class pre­fixed with "lan­guage-" to the el­e­men­t.

So, I looked for how to ac­tu­al­ly dis­play those things nice­ly, and found pris­mjs.­com which looked very nice!

So nice, in­deed, that now I hat­ed how my re­Struc­tured Text Pages looked!

There­fore, I wrote a new Niko­la plug­in that re­places do­cu­til­s' code di­rec­tive and re­places it with a much sim­pler one that just tags things as code of a giv­en lan­guage and lets prism do the rest.

AFAICS it's functionally equivalent, it supports the :linenos: option, including shifted line numbers.

I doubt any­one ev­er will want to use it but hey, there it is.

Quick Nikola Feature: document APIs using pdoc

A us­er asked in the niko­la-dis­cuss if there was a way to use Niko­la to doc­u­ment APIs. Well, there was­n't and now there is. I took pdoc and wrote a wrap­per as a plug­in for Niko­la.

And now you can just doc­u­ment python mod­ules us­ing it in a cou­ple of min­utes.

Here is the doc­u­men­ta­tion for the re mod­ule from stdlib as an ex­am­ple.

Yes, the out­put is not great, and it needs CSS, and many oth­er fix­es, but it's easy to im­prove now that it's there, as long as there is in­ter­est.

Changes in this blog

I have made a few changes in how this blog is gen­er­at­ed and what fea­tures are en­abled.

Similarity Plugin

I have en­abled the sim­i­lar­i­ty plug­in and dis­abled the equiv­a­lent fea­ture pro­vid­ed by Dis­qus. In gen­er­al, it seems this plug­in pro­duces more whim­si­cal con­nec­tions which is a big plus. It may lead you to dis­cov­er very ran­dom things I wrote. I know it re­mind­ed me of things I did not re­mem­ber writ­ing!

Continuous Import

I have en­abled the con­tin­u­ous im­port plug­in which will au­to­mat­i­cal­ly merge some oth­er as­pects of my on­line pres­ence with this blog. Cur­rent­ly it has sup­port for goodreads (which I al­ready men­tioned be­fore) and youtube (which I have not), so you will see short book re­views and ran­dom videos I make.

Ex­am­ples: goodreads and youtube

This plug­in can the­o­ret­i­cal­ly sup­port any­thing that pro­vides a RSS/Atom feed and lets you ap­ply cus­tom tem­plates to the con­tent so you end up with pret­ty posts in all cas­es. If you are in­ter­est­ed in us­ing it for some oth­er ser­vice, feel free to ask me about it.

Front Page

For the first time ev­er, the front page of this site is no longer the blog, but a land­ing page.


At some point in the fu­ture I may switch to a more cus­tom­ized the­me, but that's not in any spe­cif­ic roadmap, it will hap­pen when it hap­pen­s. In the mean­time, this is now us­ing the Lu­men bootswatch and am ex­per­i­ment­ing with us­ing Flow­Type for a more read­able au­to­mat­ic font size.

Nikola v7 finally out!

I am th­ri­lled to an­noun­ce ver­sion 7 of Niko­la, a sta­tic si­te and blog ge­ne­ra­tor is ou­t, wi­th a ba­zi­llion fea­tu­res and bu­gfixes (see be­lo­w).

You can get it at all the usual pla­ce­s, and he­re's the re­lea­se an­noun­ce­ment

He­re's the new fea­tu­res, the bu­gfixes list would make the post too long :-)

  • Added UNS­LU­GI­FY_­TI­TLES op­tion for making ti­tles fe­tched via the fi­le­na­me re­gexp pre­ttier (Is­sue #1282)

  • New de­pen­den­cie­s: na­tsort (na­tu­ral sor­ting in ga­lle­rie­s) and da­teu­til (re­pla­ces py­tz)

  • Niko­­­la.­­co­­­m­­man­­ds are now the use­­r-­­frien­d­­ly wra­­ppers from co­n­­so­­­le (Is­­sue #1177)

  • Add a gi­thu­b_­de­ploy co­m­mand to de­ploy to Gi­tHub pa­ges (Is­sue #1208)

  • Re­­mo­­­ve tidy fi­l­­ter (it was bro­­ken due to tidy being an­­cien­­t) (Is­­sue #1164)

  • Added GE­NE­RA­TE_R­SS se­tting to allow di­sa­bling RSS in Niko­la (Is­sue #1236)

  • Li­nk lis­­tings raw sou­r­­ces if CO­­­P­­Y_­­SOU­R­­CES is True (Is­­sue #1214)

  • Mu­ch mo­re po­wer­ful niko­la plu­gin co­m­mand (Is­sue #1189)

  • Mo­­­re po­­we­r­­ful co­n­­so­­­le mo­­­de allo­­ws ac­­ce­ss to all niko­­­la co­­­m­­man­­ds (Is­­sue #830)

  • New `RO­BO­TS_EX­CLU­SION­S` op­tion lis­ting re­sour­ces to ex­clu­de from site­map and in­clu­de in new ge­ne­ra­ted /ro­bo­ts.­txt (Is­sue #804)

  • Ge­­ne­­ra­­te si­te­­ma­­pi­n­­dex co­n­­tai­­ning RSS and si­te­­map fi­­les (Is­­sue #804)

  • Su­­pport hooks in te­m­­pla­­tes, for use by plu­­gins (Is­­sue #896)

  • Use rea­d­­li­­ne if avai­­la­­ble (Is­­sue #1238)

  • Re­pla­ced REA­D_­MO­RE_­LI­NK wi­th IN­DEX_­REA­D_­MO­RE_­LI­NK and RSS_­REA­D_­MO­RE_­LI­NK (Is­sue #1222)

  • Added rea­­di­n­­g_­­ti­­me, re­­mai­­ni­n­­g_­­rea­­di­n­­g_­­ti­­me, pa­­ra­­gra­­ph_­­coun­­t, re­­mai­­ni­n­­g_­­pa­­ra­­gra­­ph_­­count tags for REA­­D_­­MO­­­RE_­­LI­NK (Is­­sue #1220)

  • Add ca­­no­­­ni­­cal li­nk in lis­­tings.

  • Added su­­pport for new me­­ta fi­­les that are the sa­­me fo­r­­mat as 1-­­fi­­le me­­ta­­da­­ta, allo­­wing for grea­­ter fle­­xi­­bi­­li­­ty (Is­­sue #954)

  • Co­­­lo­r­­box is now in­­te­r­­na­­tio­­­na­­li­­zed (Is­­sue #1205)

  • Added LO­­­GO­­_URL and SHO­­W_­­BLO­­­G_­­TI­­TLE=­­True se­­ttings to fa­­ci­­li­­ta­­te sho­­wing off lo­­­gos (Is­­sue #1122)

  • Crea­­te au­­to­­­ma­­tic sto­­­ry in­­dex pa­­ges for su­­bfo­l­­de­r­s, too (Is­­sue #793)

  • New Slo­­­vak tran­s­­la­­tion by To­­­máš Prékop

  • Created a Ma­­rk­­do­­w­­nEx­­ten­­sion plu­­gin cla­ss (Is­­sue #1175)

  • The ba­­se the­­me pro­­­du­­ces pro­­­pe­r­­ly se­c­­tio­­­ned and se­­man­­tic HT­­M­­L5 (Is­­sues #1123, #1137)

  • The ba­­se the­­me co­­­mes wi­­th a new sty­­lish look by de­­fault (Is­­sue #1137)

  • The ba­­se the­­me su­­ppo­r­­ts Ri­­gh­­t-­­to­­-­­Le­­ft by using ::­­di­­r(­r­­tl) CSS4 ru­­les and <h­t­­ml di­­r="­r­­tl"> tags whe­­re va­­lid (Is­­sue #1146)

  • Boots­­trap 2 up­­dated to 2.3.2 (via Is­­sue #1137)

  • Added FO­R­­CE_I­­SO­­8601 se­­tting that cu­­rren­­tly makes new_­­post use ISO 8601 da­­tes (via Is­­sue #1156)

  • Added su­­pport for TZ spe­­ci­­fied in post da­­te (Is­­sue #1118)

  • Make niko­la init ask about the si­te’s se­ttings (Is­sue #1080)

  • Use na­­tu­­ral so­r­­ting for fi­­les and fo­l­­ders list in lis­­tings and ga­­lle­­ries (Is­­sue #1144)

  • Added in­­va­­rian­­ce tes­­ting (Is­­sue #672)

  • Plu­­gins can in­­ject te­m­­pla­­tes in the sys­­tem (Is­­sue #1139)

  • niko­la im­por­t_wor­dpress now has a --­­q­­tran­s­­la­­te op­tio­n, to par­se pos­ts in the qtrans­la­te wor­dpress plu­gin for­mat and turn them in­to mul­ti­lin­gual Niko­la pos­ts (Is­sue #1072)

  • niko­la con­so­le allo­ws for in­ter­pre­ter choi­ce via -b, -i, -p; mo­reo­ve­r, su­pport for bp­y­thon is not de­pre­ca­ted an­y­mo­re (Is­sue #1126)

  • re­ti­red tag for pos­ts has been re­pla­ced wi­th pri­va­te (via Is­sue #686)

  • Chan­­ged the de­­fault TRAN­S­­LA­­TIO­N­S_­­PA­­TTERN to "{­­pa­­th}.{­­lan­­g}.{ex­­t}". (Is­­sues #990, #829)

  • Ba­­ckwa­r­­ds co­m­­pa­­ti­­bi­­li­­ty wi­­th v5 is bro­­ken. Added ba­­ckwa­r­­d­s-i­n­­co­m­­pa­­ti­­ble chan­­ges. (Is­­sue #829)

  • Added a CON­TEN­T_­FOOTE­R_­FOR­MA­TS con­fig op­tio­n. It is us­ed to for­mat the CON­TEN­T_­FOOTER va­ria­ble pro­per­l­y, for com­pa­ti­bi­li­ty wi­th the Trans­la­ta­ble Se­ttings fea­tu­re. The va­ria­ble takes a dic­t, the ke­ys of whi­ch are lan­gua­ges, and va­lues are (args, kwargs). (Is­sue #1112)

  • Ce­r­­tain se­­ttings are now tran­s­­la­­ta­­ble. As of no­­w, the se­­ttings are: BLO­­­G_AU­­THO­­­R, BLO­­­G_­­TI­­TLE, BLO­­­G_­­DES­­CRI­P­­TIO­­N, LI­­CEN­SE, CO­N­­TEN­­T_­­FOOTE­­R, SO­­­CIA­­L_­­BU­­TTO­N­S_­­CO­­­DE, SEA­R­­CH_­­FO­R­­M, BO­D­­Y_EN­­D, EX­­TRA_HEA­­D_­­DA­­TA, NA­­VI­­GA­­TIO­­N_­­LI­NKS, REA­­D_­­MO­­­RE_­­LI­NK (the up-­­to­­-­­da­­te list is avai­­la­­ble in SI­­TE.­­TRAN­S­­LA­­TA­­BLE_SE­­TTINGS) (Is­­sues #851, #1057, #1061, #1112)

  • New Po­s­­­­tho­­­r() re­­turns me­­ta 'au­­tho­­­r' or BLO­­­G_AU­­THOR (Is­­sue #1117)

  • Ship ba­se-­­ji­n­­ja, boots­­tra­­p-­­ji­n­­ja, boots­­tra­­p3-­­ji­n­­ja wi­­th Niko­­­la (Is­­sue #1104)


  • Re­­mo­­­ve old me­ss­a­ges le­­ft over for ba­­ckwa­r­­ds co­m­­pa­­ti­­bi­­li­­ty: (Is­­sues #829, #1105)

    • "Mo­­­­­re po­­s­­­ts abou­­­t", re­­­pla­­­ced by "Mo­­­­­re po­­s­­­ts about %s"

    • "Po­­s­­­te­­­d", re­­­pla­­­ced by "Po­­s­­­te­­­d:"

    • "A­­l­­­so avai­­­la­­­ble in", re­­­pla­­­ced by "A­­l­­­so avai­­­la­­­ble in:"

  • Re­­mo­­­ve old "s­­l_­­SI", "tr_­­TR" lo­­­ca­­le alia­­ses (u­­se "s­­l" and "tr") (Is­­sue #829, #1105)

  • New op­­tion RSS_­­PLAIN to op­­tio­­­na­­lly strip HT­­ML from RSS fee­­ds (Is­­sue #1107)

  • Su­­pport co­n­­tent key in co­m­­pi­­le­r­s' crea­­te_­­post (Is­­sue #1098)

  • Use se­tup­tool­s’ ex­tras fea­tu­re. Use pip ins­ta­ll niko­la[ex­tra­s] to ins­ta­ll Niko­la wi­th ex­tras (re­­qui­­re­­men­­ts-ex­­tra­s.­­txt, for­mer­ly re­­qui­­re­­men­­ts-­­fu­­ll.­­txt -- no­te the na­me chan­ge!) (Is­sue #1089)

Contents © 2000-2024 Roberto Alsina