Skip to main content

Ralsina.Me — Roberto Alsina's website

Posts about nikola (old posts, page 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 thrilled to an­nounce ver­sion 7 of Niko­la, a stat­ic site and blog gen­er­a­tor is out, with a bazil­lion fea­tures and bug­fix­es (see be­low).

You can get it at all the usu­al places, and here's the re­lease an­nounce­ment

Here's the new fea­tures, the bug­fix­es list would make the post too long :-)

  • Added UN­SLUGI­FY_TI­TLES op­tion for mak­ing ti­tles fetched via the file­name reg­exp pret­ti­er (Is­sue #1282)

  • New de­pen­den­cies: nat­sort (nat­u­ral sort­ing in gal­leries) and da­teu­til (re­places pytz)

  • Niko­la.­­com­­mands are now the user-friend­­ly wrap­pers from con­­sole (Is­­sue #1177)

  • Add a github_de­ploy com­mand to de­ploy to GitHub pages (Is­sue #1208)

  • Re­­move tidy fil­ter (it was bro­ken due to tidy be­ing an­­cien­t) (Is­­sue #1164)

  • Added GEN­ER­ATE_RSS set­ting to al­low dis­abling RSS in Niko­la (Is­sue #1236)

  • Link list­ings raw sources if COPY­­_­­SOURCES is True (Is­­sue #1214)

  • Much more pow­er­ful niko­la plug­in com­mand (Is­sue #1189)

  • More pow­er­­ful con­­sole mode al­lows ac­cess to all niko­la com­­mands (Is­­sue #830)

  • New `ROBOT­S_EX­CLU­SION­S` op­tion list­ing re­sources to ex­clude from sitemap and in­clude in new gen­er­at­ed /robot­s.txt (Is­sue #804)

  • Gen­er­ate sitemap­in­dex con­­tain­ing RSS and sitemap files (Is­­sue #804)

  • Sup­­port hooks in tem­­plates, for use by plug­ins (Is­­sue #896)

  • Use read­­­line if avail­able (Is­­sue #1238)

  • Re­placed READ­_­MORE_LINK with IN­DEX_READ­_­MORE_LINK and RSS_READ­_­MORE_LINK (Is­sue #1222)

  • Added read­­ing_­­time, re­­main­ing_read­­ing_­­time, para­­graph_­­coun­t, re­­main­ing_­­para­­graph_­­count tags for READ­­_­­MORE_LINK (Is­­sue #1220)

  • Add canon­i­­cal link in list­ings.

  • Added sup­­port for new meta files that are the same for­­mat as 1-­­file meta­­data, al­low­ing for greater flex­i­­bil­i­­ty (Is­­sue #954)

  • Col­or­box is now in­­ter­­na­­tion­al­ized (Is­­sue #1205)

  • Added LO­­GO_URL and SHOW_BLOG_TI­TLE=True set­t­ings to fa­­cil­i­­tate show­ing off lo­­gos (Is­­sue #1122)

  • Cre­ate au­­to­­mat­ic sto­ry in­­dex pages for sub­­­fold­er­s, too (Is­­sue #793)

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

  • Cre­at­ed a Mark­­downEx­ten­­sion plug­in class (Is­­sue #1175)

  • The base theme pro­­duces prop­er­­ly sec­­tioned and se­­man­tic HT­M­L5 (Is­­sues #1123, #1137)

  • The base theme comes with a new stylish look by de­­fault (Is­­sue #1137)

  • The base theme sup­­ports Right-­­to-Left by us­ing ::dir(rtl) CSS4 rules and <html dir="rtl"> tags where valid (Is­­sue #1146)

  • Boot­s­trap 2 up­­­dat­ed to 2.3.2 (via Is­­sue #1137)

  • Added FORCE_ISO8601 set­t­ing that cur­ren­t­­ly makes new_­­post use ISO 8601 dates (via Is­­sue #1156)

  • Added sup­­port for TZ spec­i­­fied in post date (Is­­sue #1118)

  • Make niko­la init ask about the site’s set­tings (Is­sue #1080)

  • Use nat­u­ral sort­ing for files and fold­ers list in list­ings and gal­­leries (Is­­sue #1144)

  • Added in­­­var­i­ance test­ing (Is­­sue #672)

  • Plug­ins can in­­­ject tem­­plates in the sys­tem (Is­­sue #1139)

  • niko­la im­port_­word­press now has a --q­­tran­s­late op­tion, to parse posts in the qtrans­late word­press plug­in for­mat and turn them in­to mul­ti­lin­gual Niko­la posts (Is­sue #1072)

  • niko­la con­sole al­lows for in­ter­preter choice via -b, -i, -p; more­over, sup­port for bpython is not dep­re­cat­ed any­more (Is­sue #1126)

  • re­tired tag for posts has been re­placed with pri­vate (via Is­sue #686)

  • Changed the de­­fault TRAN­S­LA­­TION­S_­­PAT­TERN to "{­­path}.{lang}.{ex­t}". (Is­­sues #990, #829)

  • Back­­wards com­­pat­i­­bil­i­­ty with v5 is bro­ken. Added back­­ward­s-in­­com­­pat­i­ble changes. (Is­­sue #829)

  • Added a CON­TENT_­FOOTER_­FOR­MATS con­fig op­tion. It is used to for­mat the CON­TENT_­FOOT­ER vari­able prop­er­ly, for com­pat­i­bil­i­ty with the Trans­lat­able Set­tings fea­ture. The vari­able takes a dic­t, the keys of which are lan­guages, and val­ues are (args, kwargs). (Is­sue #1112)

  • Cer­­tain set­t­ings are now tran­s­lat­able. As of now, the set­t­ings are: BLOG_AU­THOR, BLOG_TI­TLE, BLOG_DE­SCRIP­­TION, LI­­CENSE, CON­­TEN­T_­­FOOTER, SO­­CIAL_BUT­­TON­S_­­CODE, SEARCH_­­FOR­M, BODY_END, EX­­TRA_­­HEAD­­_­­DATA, NAV­I­­GA­­TION_LINKS, READ­­_­­MORE_LINK (the up­­-­­to-­­date list is avail­able in SITE.­­TRAN­S­LAT­ABLE_SET­T­INGS) (Is­­sues #851, #1057, #1061, #1112)

  • New­thor() re­­turns meta 'au­thor' or BLOG_AU­THOR (Is­­sue #1117)

  • Ship base-jin­­ja, boot­s­trap-jin­­ja, boot­s­trap3-jin­­ja with Niko­la (Is­­sue #1104)


  • Re­­move old mes­sages left over for back­­wards com­­pat­i­­bil­i­­ty: (Is­­sues #829, #1105)

    • "More posts about", re­­­placed by "More posts about %s"

    • "Post­ed", re­­­placed by "Post­ed:"

    • "Al­­­so avail­able in­­­", re­­­placed by "Al­­­so avail­able in­­­:"

  • Re­­move old "s­l_SI", "tr_TR" lo­­cale alias­es (use "s­l" and "tr") (Is­­sue #829, #1105)

  • New op­­tion RSS_­­PLAIN to op­­tion­al­­ly strip HTML from RSS feeds (Is­­sue #1107)

  • Sup­­port con­­tent key in com­pil­er­s' cre­ate_­­post (Is­­sue #1098)

  • Use se­tup­tool­s’ ex­tras fea­ture. Use pip in­stall niko­la[ex­tras] to in­stall Niko­la with ex­tras (re­quire­­ments-ex­­tras.txt, for­mer­ly re­quire­­ments-­­ful­l.txt -- note the name change!) (Is­sue #1089)

Contents © 2000-2023 Roberto Alsina