Compare commits

...

20 Commits

@ -5,30 +5,34 @@ const miniHtml = require('html-minifier');
const { EleventyRenderPlugin } = require('@11ty/eleventy');
// Markdown //
function wikilinkSlugifier(pageName) {
/*function wikilinkSlugifier(pageName) {
pageName = pageName.replace(/\s+/, '-');
pageName = slugify(pageName, {
remove: /'/g,
lower: true
});
return pageName
}
}*/
const markdownIt = require('markdown-it');
const { default: slugify } = require('slugify');
const md = markdownIt({
html: true
})
.use(require('markdown-it-wikilinks')({
uriSuffix: '',
makeAllLinksAbsolute: true,
class: 'wikilink',
postProcessPageName: wikilinkSlugifier
}))
.use(require('markdown-it-anchor'))
.use(require('markdown-it-footnote'))
.use(require('markdown-it-mark'))
.use(require('markdown-it-task-lists'))
.use(require('markdown-it-mathjax3'));
html: true,
typographer: true
})
/*.use(require('markdown-it-wikilinks')({
uriSuffix: '',
makeAllLinksAbsolute: true,
class: 'wikilink',
postProcessPageName: wikilinkSlugifier
}))*/
.use(require('markdown-it-anchor'), {
permalink: require('markdown-it-anchor').permalink.headerLink(),
})
.use(require('markdown-it-footnote'))
.use(require('markdown-it-mark'))
.use(require('markdown-it-task-lists'))
.use(require('markdown-it-mathjax3'));
const { default: slugify } = require('slugify');
module.exports = function(eleventyConfig) {
// General //
@ -97,8 +101,8 @@ module.exports = function(eleventyConfig) {
eleventyConfig.setServerPassthroughCopyBehavior('copy');
eleventyConfig.addPassthroughCopy({'svg': '/'});
eleventyConfig.addPassthroughCopy('js');
eleventyConfig.addPassthroughCopy({'assets': '/'});
eleventyConfig.addPassthroughCopy('index.js');
// Plugins //
eleventyConfig.addPlugin(require('eleventy-plugin-find'));
@ -134,6 +138,12 @@ module.exports = function(eleventyConfig) {
}
}
});
/*eleventyConfig.addPlugin(
require('@photogabble/eleventy-plugin-interlinker'),
{
defaultLayout: 'layouts/wikilink-embed.liquid'
}
);*/
eleventyConfig.addPlugin(EleventyRenderPlugin);
eleventyConfig.addPlugin(require('eleventy-sass'), {
compileOptions: {
@ -147,7 +157,7 @@ module.exports = function(eleventyConfig) {
});
eleventyConfig.addPlugin(require('eleventy-plugin-svg-contents'));
eleventyConfig.addPlugin(require('@sardine/eleventy-plugin-tinysvg'), {
baseUrl: 'assets/svg/'
baseUrl: 'svg/'
});
eleventyConfig.addPlugin(require('eleventy-plugin-toc'), {
ul: true,
@ -184,10 +194,7 @@ module.exports = function(eleventyConfig) {
removeComments: true,
collapseWhitespace: true,
minifyCSS: true,
minifyJS: {
warnings: true,
expression: true,
},
minifyJS: true,
minifyURLs: true
});
return minified;

@ -1 +1 @@
lts/*
lts/*

@ -10,15 +10,7 @@ eleventyExcludeFromCollections: true
<!DOCTYPE html>
<html prefix='og: http://ogp.me/ns#' dir='ltr'>
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<script>
window.onload = function(){
const pageNotFound = window.location.href.replace(/https:\/\/tommi\.space/g, '');
const errorReportUri = '{{ site.encoded_mailto }}?subject=%5Btommi.space%5D%20%5B404%5D%20' + pageNotFound;
document.getElementById('error-report').setAttribute('href', errorReportUri);
};
</script>
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<body class='landing'>
<a class='vertical flex' href='/home' onClick='javascript:history.go(-1)'>
@ -38,4 +30,11 @@ window.onload = function(){
</li>
</ul>
</div>
<script>
window.onload = function(){
const pageNotFound = window.location.href.replace(/https:\/\/tommi\.space/g, '');
const errorReportUri = '{{ site.encoded_mailto }}?subject=%5Btommi.space%5D%20%5B404%5D%20' + pageNotFound;
document.getElementById('error-report').setAttribute('href', errorReportUri);
};
</script>
</body></html>

@ -12,7 +12,7 @@ sitemap:
<!DOCTYPE html>
<html lang='it'>
<head>
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
</head>
<a href='/home' class='button tool'>home</a>

@ -11,7 +11,7 @@ sitemap:
---
<!DOCTYPE html>
<html lang='en'>
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<link rel='stylesheet' type='text/css' href='/everyone.css'>
<body>

@ -7,7 +7,7 @@ type: WebSite
<!DOCTYPE html>
<html prefix='og: http://ogp.me/ns#' dir='ltr'>
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<body class='landing'>
<div class='vertical flex'>

@ -1,12 +1,13 @@
---
date: 2023-03-01T11:35:23+01:00
updated: 2023-03-06T12:13:25+01:00
updated: 2023-03-15T09:50:17+01:00
location: home
tags:
- history
- uni/thesis
- wip
- reading/book
permalink: /internet-history/
---
p. 15:
@ -33,4 +34,50 @@ In 1962, Licklider hired by ARPA to focus on command and control of behavioral s
What in the 60s was strongly and <q>jealously guarded</q>, computing resources, now is abundant. It is now software and algorithms the platforms provided.
> Lickliders influence was felt further afield through his support of large research programmes in universities that stimulated the early computer studies departments and <u>attracted the new generation of students</u> to the new field.
> Lickliders influence was felt further afield through his support of large research programmes in universities that stimulated the early computer studies departments and <u>attracted the new generation of students</u> to the new field.
Zott's beer garden as one of the main locations part of the story of the internet. The recurring **[[Partying|partying]] factor** in the development of digital technologies, as with, [for example, Facebook](https://wired.com/story/sex-beer-and-coding-inside-facebooks-wild-early-days 'Sex, Beer, and Coding: Inside Facebooks Wild Early Days in Palo Alto | WIRED') (page 34)
> The invention of the transistor at Bell Labs in 1947 liberated computing from the large, unreliable vacuum tubes on which the first digital computers were based.
page 53
> Tim Berners-Lee developed a piece of software called <q>Enquire</q> in the 1980s to map relationships between the various people, programs and systems he encountered there \[CERN\]
page 105
> He \[Berners-Lee\] and visionaries such Ted Nelson and Douglas Engelbart who came after him both sought to develop tools that could allow human beings to <u>better cope with the weight of information bearing down on them</u>.
page 106, **hypertext** by Ted Nelson
> > Its \[the www's\] universality is essential: the fact that a hyperlink can point to anything, be it personal, local or global, be it draft or highly polished.
In October 1990 HTML editing and viewing, in December 1990 the first servers. Uninterest, slow implementation and adopting even within CERN. The first thing to be widely written in HTML was CERN's telephone directory.
In 1995 Netscape went public with the largest IPO ever.
> For the first few years of its existence the Web was <q>defined by nothing more than specifications stored on some disk sitting around somewhere at CERN</q>.
> When the early developers of www software met in early 1994 for a <q>www wizards' workshop</q>, Berners-Lee proposed the idea of a consortium to oversee the future direction of the Web. The www Consortium, known as <q>W3C</q>, was formed to promote <u class='double'>interoperability</u> and <u>standardization</u> of web technologies.
## Stallman and proprietary software
<cite>Open-source: the hacker renaissance</cite>, from page 111:
> delivery of new computers whose manufacturers demanded that their users sign non-disclosure agreements prohibiting them from swapping code and building on each other's work. From Stallman's perspective:
>
> > This meant that the first step in using a computer was to promise not to help your neighbor. A cooperating community was forbidden. The rule made by the owners of proprietary software was, <q>If you share with your neighbor, you are a pirate. If you want any changes, beg us to make them.</q>
> The community that emerged from the wide collaboration on Linux was a loosely governed structure over which Torvalds watched as a benevolent dictator and moral authority.
https://youtu.be/fs-YpQj88ew
<div class='red box'>
<ul><li>What distinguished the Capitalist efforts at making Web technologies and communitarian ones such as Linux?</li>
<li>consider the aspect of the technology and software vs the hardware it is run on</li></ul>
</div>
page 118: Google's initial focus was on **back links**. PageRank, **Freedom to seek** at page 119. <q>googol</q>: Google's success and effectiveness is based on massive amount of data, centralized, processed, inspected, **ranked**:
> The enormity of the googol, according to Google, <q>reflects their mission to organize a seemingly infinite amount of information on the Web</q>.

@ -0,0 +1,8 @@
---
date: 2023-03-14T16:26:07+01:00
tags:
- geek
- idea
updated: 2023-03-14T16:29:01+01:00
---
As [[A History of the Internet and its future|in the early days of the World Wide Web]], we should return to the concept of a browser as a software that not only browses the web, but it makes it easy for anyone to create a basic website. Something like an universal profile and identity page, not necessarily a personal website, not a social media profile.

@ -135,10 +135,6 @@ brew pin navi
## GPG
GnuPG Cheat Sheets:
<script src='https://gist.github.com/turingbirds/3df43f1920a98010667a.js'></script>
- [GnuPG CheatSheet](https://devhints.io/gnupg 'GnuPG Cheat Sheet') on [devhints.io](https://devhints.io/ 'devhints')
- [GPG Cheat Sheet](http://irtfweb.ifa.hawaii.edu/~lockhart/gpg/ 'GPG Cheat Sheet')
@ -188,4 +184,4 @@ See [HTML Proofer \> Configuration](https://github.com/gjtorikian/html-proofer#c
## Nextcloud manteinance
![[Server Setup#Nextcloud Cheat Sheet]]
![[Server Setup#Nextcloud Cheat Sheet]]

@ -1,42 +1,45 @@
---
date: 2020-12-27T06:40:14+01:00
updated: 2023-02-28T12:52:06+01:00
updated: 2023-03-14T15:46:53+01:00
tags: [geek, todo, geek/idea]
description: Computer related tasks tracking
---
1. why does server.tommi.space backup script throws an error anyways?
4. [[Switching to Linux]]
5. Expose PW publicly with a stronger password
6. GitHub education verification renewal
7. Use Samsung tablet as graphic table
8. Scambi Festival 2022 + LNS 2023 videos upload on Internet Archive
9. Open source STT software + library, for automated workflow
10. Backup/storage/hosting with Cubbits Object Storage [Cubbit Cloud-to-cloud](https://cubbit.io/cloud-to-cloud)
11. [Server fallback](https://yunohost.org/en/app_fallback)
12. [Using YunoHost as a Tor Hidden Service](https://yunohost.org/en/torhiddenservice)
13. [[GiTMI]]
14. Git in-depth learning via video
1. `0 2 * * * BACKUP_PORT=60213 /usr/local/bin/backup || echo 'The automatic backup has failed.' | mailx -s 'AUTO BACKUP FAILED' tommiboom@pm.me`
1. Xplosion Server dotfiles backup
2. [[Switching to Linux]]
1. Configure Firefly III
1. Copy `assets` folder from Mac from ThinkTommi
3. Expose PW publicly
4. GitHub education verification renewal
5. Use Samsung tablet as graphic table
6. Scambi Festival 2022 + LNS 2023 videos upload on Internet Archive
7. Open source STT software + library, for automated workflow
8. Backup/storage/hosting with Cubbits Object Storage [Cubbit Cloud-to-cloud](https://cubbit.io/cloud-to-cloud) (implement with Dejà Dup Backups/Timeshift/Pika Backups)
9. [Server fallback](https://yunohost.org/en/app_fallback)
10. [Using YunoHost as a Tor Hidden Service](https://yunohost.org/en/torhiddenservice)
11. [[GiTMI]]
12. Git in-depth learning via video
- Configure [git email sending](https://git-send-email.io 'git-send-email.io')
- <https://github.com/MichaelMure/git-bug>
15. @stream.tommi.space -> @tommi.space
16. [[Images]] and [[Storage]]
17. [[Automations]]
18. Integrate audios, albums and images in log/daily Zettelkasten system (unique images and audios links to be opened)
19. [Setup Matrix server](https://github.com/matrix-org/synapse#id5 'Install Synapse')
20. [[Scripts]]
13. @stream.tommi.space -> @tommi.space
14. [[Images]] and [[Storage]]
15. [[Automations]]
16. Integrate audios, albums and images in log/daily Zettelkasten system (unique images and audios links to be opened)
17. [Setup Matrix server](https://github.com/matrix-org/synapse#id5 'Install Synapse')
18. [[Scripts]]
- get location/coordinates from CLI (and use them in espanso for `:fm` command)
21. Consistent resume creation ([HackMyResume](https://github.com/hacksalot/HackMyResume 'HackMyResume on GitHub'))
22. [[Linuxplosion#To do]]
23. Update [[Storage]] and [[Backup checklist]]
24. Cross-environment **[[Tags]] integration**
19. Consistent resume creation ([HackMyResume](https://github.com/hacksalot/HackMyResume 'HackMyResume on GitHub'))
20. [[Linuxplosion#To do]]
21. Update [[Storage]] and [[Backup checklist]]
22. Cross-environment **[[Tags]] integration**
- **audios**: notes containing shared links of files in Cubbit?
- **images**: consider collecting shared links of albums in a private *[Giri](https://tommi.space/giri 'Giri')*, or integrate some sort of authentication wall (as with Flickr currently) in the public one. Does it make sense? Not too much of a waste of time?
25. Configure and install [sensible.vim](https://github.com/tpope/vim-sensible 'sensible.vim on GitHub'), to associate keybindings to commands on Vim
26. Create a CSS framework
27. MacBook Pro color profile
28. #geek/idea s
29. TMI Pics custom CSS
30. [[tommi.space#page-specific to-dos]]
31. [[Road to Internet Freedom]]
32. [[Bugs and Feature Requests]]
33. [[Missing Knowledge#Geek|Learn]]
23. Configure and install [sensible.vim](https://github.com/tpope/vim-sensible 'sensible.vim on GitHub'), to associate keybindings to commands on Vim
24. Create a CSS framework
25. MacBook Pro color profile
26. #geek/idea s
27. TMI Pics custom CSS
28. [[tommi.space#page-specific to-dos]]
29. [[Road to Internet Freedom]]
30. [[Bugs and Feature Requests]]
31. [[Missing Knowledge#Geek|Learn]]

@ -4,25 +4,25 @@ updated: 2022-03-14T14:57:41+01:00
lang: it
location: Il Cubo
permalink: /cubo/
redirect_from: /il-cubo/
tags: places
toc: false
todo:
- Foto del Cubo
- Foto del Tommi Boom
toc: false
redirect_from: /il-cubo/
---
Il Cubo è la spiaggia più bella di Sanremo.
Può godere di questo primato in quanto, pur essendo uno stabilimento balneare, non ne possiede alcuna, di spiaggia.
Il Cubo è una fortezza, uninespugnabile palafitta in fondo alla serie di noiose spiagge mondane che affollano la cosiddetta zona “Tre Ponti”, a levante della ridente cittadina ligure.
Il Cubo è la roccaforte della socialità e della leggerezza, ultimo baluardo sanremese dellaperitivo con amici che non si esaurisce davanti a un qualunque bicchiere di ottima *San Miguel* alla spina, ma che arriva fino alla palletta delle diciannove e trenta, difficilmente riuscendo a terminare prima delle ventieventi.
Il Cubo è la roccaforte della socialità e della leggerezza, ultimo baluardo sanremese dellaperitivo con amici che non si esaurisce davanti a un qualunque bicchiere di ottima <cite>San Miguel</cite> alla spina, ma che arriva fino alla palletta delle diciannove e trenta, difficilmente riuscendo a terminare prima delle ventieventi.
Il Cubo è lincarnazione terrena dellideale tomistico di bar sulla spiaggia.
Al Cubo non esiste genere musicale che non trovi un momento adatto per essere riprodotto. Non a caso, Il Cubo è la casa de [Il Mio CUBO suona il Rock](https://tommi.space/tutto#concertini '“Concertini” in Tutto').
I genitori del Cubo sono Andrea e Silvia, <em lang='en'>arguably</em> i due meno associali e più umani ristoratori del ponente ligure:
I genitori del Cubo sono Andrea e Silvia, i due più umani ristoratori del ponente ligure:
Andrea, in particolare mentre surfa con mirabile abilità una <cite>Spalmer</cite>[^1], sfoggia uninvidiabile chioma di capelli doro tanto che, quando timidamente salvai per la prima volta il suo numero in rubrica, lo salvai *Andrea Capellidoro*;
Silvia è invece colei che con uno sguardo e due parole sa farmi capire che sto sparando troppe cazzate, oppure ama consigliare libri che nella vita vanno letti almeno sette volte, e cucina degli ottimi, prelibati, inimitabili <cite>Spalmer</cite>[^2].
@ -32,13 +32,13 @@ Allimbrunire, non esiste luogo migliore del Cubo in cui essere, sorseggiando,
Se Super Pippo frequentasse il Cubo, sarebbe la persona più felice del mondo. Con il suo dolcissimo sorriso, la Stefi sommerge gli *abitué* con inesauribili montagne di arachidi, donando loro attimi di platonica gioia.
Il Cubo è perfetto per studiare: sia nel periodo della sessione estiva che di quella autunnale, recandovisi, facilmente ci si potrà imbattere in assembramenti di ingegneri (che nella sessione invernale, invece, affollano [laula verde](https://tommi.space/avanguardia 'LAvanguardia')) crucciati a risolvere un problema di cui già sanno di non saper giungere a soluzione, ma che sono consapevoli che il solo scervellarsi seduti ad un tavolino del Cubo può aumentare il loro quoziente intellettivo di almeno dodici punti.
Il Cubo è perfetto per studiare: sia nel periodo della sessione estiva che di quella autunnale, recandovisi, facilmente ci si potrà imbattere in assembramenti di ingegneri (che nella sessione invernale, invece, affollano [laula verde](https://tommi.space/avanguardia 'LAvanguardia')) crucciati a risolvere un problema di cui già sanno di non saper giungere a soluzione, ma che sono consapevoli che il solo scervellarsi seduti a un tavolino del Cubo può aumentare il loro quoziente intellettivo di almeno dodici punti.
Presso il Cubo è stata pronunciata [la celeberrima frase](https://tommi.space/quotes#pista-studiare-sopravvalutato) dellaltrettanto famoso Pista, che naturalmente corrobora la tesi del paragrafo precedente.
Esiste una legge matematica che, se trasgredita, porta irreparabili maledizioni sulla vita di chi la ignora; tale regola è stata da me formulata al Cubo, per salvare il mondo:
> I Negroni ordinati da un umano $x$ devono necessariamente essere di numero $2n$; qualora avvenisse il contrario, ed erroneamente o per sfida contro la natura $x$ si trovasse a bere o, ancora peggio, pagare un numero dispari, ergo $2n+1$ di Negroni, $x$ deve aspettarsi un numero $y$ di sciagure nel corso della propria esistenza, dove $y = 2^{2n+1}$. Qualora $y \le 8$ fra tali sciagure sicuramente esisterà la morte.
> I Negroni ordinati da un umano $x$ devono necessariamente essere di numero $2n$; qualora avvenisse il contrario, ed erroneamente o per sfida contro la natura $x$ si trovasse a bere o, ancora peggio, pagare un numero dispari, ergo $2n+1$ di Negroni, $x$ deve aspettarsi un numero $y$ di sciagure nel corso della propria esistenza, dove $y = 2^{2n+1}$. Qualora $y \ge 8$ fra tali sciagure sicuramente esisterà la morte.
Il Cubo è un luogo magico e devo vergognarmi se mai qualcuno verrà a trovarmi a Sanremo senza essere ivi portato.

@ -1,6 +1,6 @@
---
date: 2021-04-04T19:24:15+02:00
updated: 2021-12-23T23:52:37+01:00
updated: 2023-03-18T15:06:23+01:00
tags: geek/knowledge
description: Insights about JavaScript, a great tool but also a nightmare.
created: 2021-12-15T13:03:38+01:00
@ -13,23 +13,60 @@ The point is that I am both lazy and excessively busy, and to actually learn a p
I am stacking here everything I find out on the web which might be useful for when I am finally going to get into the magical universe of JavaScript.
<br>
<br>
## Resources
- [My Learn Javascript list](https://github.com/stars/xplosionmind/lists/javascript '“JavaScript„ list on GitHub') on GitHub
- [Derek Siverss guide](https://sivers.org/learn-js)
- <cite><a href='http://www.javascriptbook.com/' target='_blank' title='JavaScript and JQuery'>JavaScript and JQuery</a></cite>, a book by [Jon Duckett](https://en.wikipedia.org/wiki/John_Duckett 'Jon Duckett on Wikipedia')
- <cite><a href='http://www.javascriptbook.com/' target='_blank' title='JavaScript and JQuery'>JavaScript and JQuery</a></cite>, a book by [Jon Duckett](https://en.wikipedia.org/wiki/John_Duckett 'Jon Duckett on Wikipedia')
- [10 best JavaScript practices recommended by Top Developers](https://blog.hrithwik.me/10-best-javascript-practices-recommended-by-top-developers '10 best JavaScript practices recommended by Top Developers')
- [JavaScript, The Right Way](https://jstherightway.org/ 'JavaScript, The Right Way'), an open source, easy-to-read, quick reference for JS best practices, accepted coding standards, and links around the Web
- [OneMonth](https://onemonth.com/ 'OneMonth official website'), free with [GitHub Education](https://education.github.com 'GitHub Education')
<br>
<br>
### Node
- [oclif](https://oclif.io 'The Open CLI Framework'): The Open CLI Framework · Create command line tools your users love
## Notes
- When combining stuff, the string always wins
- you can grab the content of a DOM Element by selecting it and using `innerText`
- `textContent` is better than `innerText`
### Reading and writing JSON
To read a JSON file in JavaScript, you can use the `fetch()` method to get the contents of the file as a `Response` object. Then, you can convert the `Response` object to JSON using the `json()` method.
Here is an example:
```
fetch('example.json')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error))
```
To write a JSON file in JavaScript, you can create an object that you want to write to a file, convert it to a JSON string using the `JSON.stringify()` method, and then write the string to a file using the `fs` module.
Here is an example:
```
const fs = require('fs')
const data = {
name: 'John',
age: 30,
city: 'New York'
}
### React
const jsonData = JSON.stringify(data)
- Beginners [React developer roadmap](https://dev.to/monicafidalgo/react-developer-roadmap-beginners-guide-14fc 'React developer roadmap')
fs.writeFile('example.json', jsonData, err => {
if (err) {
console.error(err)
return
}
console.log('Data written to file')
})
```
[JavaScript]: https://en.wikipedia.org/wiki/JavaScript 'JavaScript on Wikipedia'

@ -1,7 +0,0 @@
---
date: 2022-01-04T11:53:23+01:00
tags:
- zen
- love
updated: 2023-01-04T11:54:14+01:00
---

@ -1,12 +1,7 @@
---
date: 2020-01-03T01:00:00+01:00
updated: 2022-11-04T15:30:29+01:00
tags:
- zen
- topic
description: 'The study of studying, or'
updated: 2023-03-14T07:36:18+01:00
permalink: /study/
aliases: Study method, Metodo di studio
redirect_from:
- /metastudy/
- /studio/
@ -14,7 +9,13 @@ redirect_from:
- /studiare/
- /metodo-di-studio/
- /study-method/
tags:
- zen
- topic
- wip
toc: false
description: 'The study of studying, or'
aliases: Study method, Metodo di studio
---
Literally, *metastudy* should mean “studying study”; actually, it signifies deepening the knowledge of how understanding, learning and remembering something works. I collect here some thoughts concerning <u>how to study better</u>, while keeping in mind that my considerations are strictly personal.
@ -42,6 +43,10 @@ How to study is the trickiest matter. I have not found the solution which is bes
<p>E ne nasce una domanda: è il tempo passato studiando, entrando nelle cose, masticandole, “perdendoci” tempo e approfondendo oppure è il tempo cinetico, di piccoli slot iperproduttivi, concentrati e frullati, quello distorto?</p>
## Conflict
I hate to study, but I love studying. <b class='misssing'>+++</b>
## Resources
- [Study Less Study Smart](https://youtu.be/IlU-zDU6aQ0 '“Study Less Study Smart” by Marty Lobdell on YouTube') by Marty Lobdell
- [Study Less Study Smart](https://youtu.be/IlU-zDU6aQ0 '“Study Less Study Smart” by Marty Lobdell on YouTube') by Marty Lobdell

@ -0,0 +1,24 @@
---
date: 2023-03-14T07:28:48+01:00
updated: 2023-03-14T07:59:59+01:00
location: Casa Campo
permalink: /postgrad/
tags:
- uni
- future
toc: false
description: Insights about what to do after my bachelor graduation
---
I am unsure about my life plans after graduation, but I am quite certain that academic life is not for me. Still, I feel and I know that there is a lot to study and to advocate concerning the topics I tackle in [[Thesis|my thesis]]. Therefore, even though too late and guided by curiosity rather than actual interest, I am exploring potential masters. The ones I believe would suit me best are **one year masters**, since they would be the perfect balance between [[Metastudy#Conflict|my two conflicting souls]]: properly concluding my academic education, and getting out of university as soon as possible.
My personal intention is to go as far as possible, start working and discover the world (it is cliché, but it is what I need)
My academic intention is to pursue my research concerning the deep intertwining of Computer Sciences (specifically, the Web) and Social Sciences.
## Masters
A near-perfect master to which I would not care to dedicate two years is the [International Master of Science in **Computational Social Systems**](https://computationalsocialsystems.rwth-aachen.de) at [RWTH Aachen University](https://rwth-aachen.de 'Rheinisch-Westfaelische Technische Hochschule'), as my friend [Ruggero](https://linkedin.com/in/ruggsea 'Ruggero Lazzaroni on Linkedin'), who studied it and who is a former [PISE](https://unive.it/pise 'Philosophy, International Studies and Economics - Ca Foscari University') student like me, suggested me. Unfortunately, <u>the course has been discontinued</u>, Ruggero tells me it is because there are not enough professors to teach it. Knowing this encourages me even more to pursue this path, because such lack of professionals proves how this topic is not studied/researched enough.
[I posted about this on the Fediverse](https://pan.rent/@tommi/109943080493865161 'My request for help on Pan'), and I got some interesting, but not revelatory, intel.
By wandering around Linkedin, I stumbled upon (or, I should rather write <q>the algorithm fed me with</q>) [Digital Culture Studies](https://tilburguniversity.edu/education/masters-programmes/digital-culture-studies 'Digital Culture Studies - Tilburg University') at Tilburg University. It immediately got my attention, but by further reading about it, I feel it is full of stuff I already know and the intertwining with Computer Science is minimal.

@ -25,8 +25,6 @@ I just know I deeply love [Jonathan Larson](https://tommi.space/people#jonathan-
## La vie bohème
<https://youtu.be/i5tuzq-uIVc>
<div class='embed'><iframe title='La Vie Bohème A and B' src='https://p.lu/videos/embed/2dfddc5f-1298-4875-95f0-67189e655a19?autoplay=1&amp;warningTitle=0' allowfullscreen='' sandbox='allow-same-origin allow-scripts allow-popups' frameborder='0'></iframe></div>
> To days of inspiration

@ -0,0 +1,9 @@
---
date: 2023-03-14T05:52:38+01:00
location: Casa Campo
tags:
- uni/thesis
- wip
updated: 2023-03-14T06:08:37+01:00
---
During its earliest days, and even before conquering such name, the internet was open. Even more notably, its not being determined and somewhat "fuzzy" were crucial aspects of its whole existence.

@ -0,0 +1,10 @@
---
date: 2023-03-14T17:23:27+01:00
updated: 2023-03-14T17:31:11+01:00
location: BAUM
tags:
- uni/thesis
- wip
---
- Yarmo's point about how the internet shifted towards what is more profitable: if self-hosting was promoted, it could easily be the standard now.
- horizontal vs vertical scalability

@ -0,0 +1,17 @@
---
date: 2023-03-14T17:00:42+01:00
updated: 2023-03-14T17:10:39+01:00
location: BAUM
permalink: /must/
aliases: Must…
tags:
- reading
- idea
- wip
description: Book passages, articles, movies, songs, podcasts, quotes I believe anyone should read/watch/listen to at least once in their life. Even stuff to do, or events to attend.
---
**#todo**: loop in tommi.space's data. For each entry, if `must` is `true`, add it to this page.
to add:
- chapter "The Web!" in [[A History of the Internet and its future]]

@ -8,6 +8,7 @@ tags:
- music
- erasmus
permalink: /amore-oggi/
image: /amore-oggi.webp
---
Ieri sera, leggendo <cite>[Oceano mare](https://it.wikipedia.org/wiki/Oceano_mare '“Oceano mare” su Wikipedia')</cite>, regalatomi dalla mia cara amica [Valeria](https://instagram.com/valeria.contarini '@valeria.contarini su Instagram') (che compie gli anni oggi, buon compleanno ❤️), mi imbatto nel personaggio del professor Bartleboom e mi si spalancano le palpebre.

@ -1,6 +1,6 @@
---
title: Zibaldone
redirect_from: [/blog/, /en/zibaldone/, /zibaldone/en/]
redirect_from: [/blog/, /en/zibaldone/]
lang: en
ref: Zibaldone
description: Things getting out of Tommis head, in the form of articles

@ -1,4 +1,5 @@
added,title,url,tags,description
2023-03-18T14:14:01+01:00,,https://photogabble.co.uk,personal geek,Simon Danns personal website
2023-03-06T13:54:13+01:00,Linus Bohman,https://linusbohman.se,personal geek odd,a personal website that allows the user to customize appearance and functionalities. So cool!
2023-02-03T13:30:20+01:00,distrochooser,https://distrochooser.de,geek linux,distrochooser.de attempts to help Linux beginners to choose a Linux distribution suited to their needs.
2022-12-12T14:55:03+01:00,cheat.sh,https://cheat.sh/,tool geek,The only cheat sheet you need. Unified access to the best community driven documentation repositories of the world.

1 added title url tags description
2 2023-03-18T14:14:01+01:00 https://photogabble.co.uk personal geek Simon Dann’s personal website
3 2023-03-06T13:54:13+01:00 Linus Bohman https://linusbohman.se personal geek odd a personal website that allows the user to customize appearance and functionalities. So cool!
4 2023-02-03T13:30:20+01:00 distrochooser https://distrochooser.de geek linux distrochooser.de attempts to help Linux beginners to choose a Linux distribution suited to their needs.
5 2022-12-12T14:55:03+01:00 cheat.sh https://cheat.sh/ tool geek The only cheat sheet you need. Unified access to the best community driven documentation repositories of the world.

@ -14,8 +14,8 @@ lang: en
<updated>{{ collections.all | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
<id>{{ altUrl }}</id>
<author>
<name>{{ author.name }}</name>
<email>{{ author.email }}</email>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{%- for entry in collections.all %}
{%- set absolutePostUrl = entry.url | absoluteUrl(metadata.url) %}

@ -16,8 +16,8 @@ todo:
<updated>{{ collections.all | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
<id>{{ altUrl }}</id>
<author>
<name>{{ author.name }}</name>
<email>{{ author.email }}</email>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{%- for entry in internetawesomeness %}
{%- set absolutePostUrl = entry.url | absoluteUrl(metadata.url) %}

@ -13,8 +13,8 @@ permalink: italiano.xml
<updated>{{ collections.posts | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
<id>{{ altUrl }}</id>
<author>
<name>{{ author.name }}</name>
<email>{{ author.email }}</email>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{%- for entry in collections.all %}
{% if entry.data.lang == 'it' %}

@ -14,8 +14,8 @@ lang: en
<updated>{{ collections.all | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
<id>{{ altUrl }}</id>
<author>
<name>{{ author.name }}</name>
<email>{{ author.email }}</email>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{%- for entry in collections.jam %}
{%- set absolutePostUrl = entry.url | absoluteUrl(metadata.url) %}

@ -14,8 +14,8 @@ lang: it
<updated>{{ collections.all | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
<id>{{ altUrl }}</id>
<author>
<name>{{ author.name }}</name>
<email>{{ author.email }}</email>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{%- for entry in collections.poetry %}
{%- set absolutePostUrl = entry.url | absoluteUrl(metadata.url) %}

@ -1,5 +1,5 @@
<div class='one column row'>
<div class='banner red box center'>
<div class='red box center'>
<h3>🚧 {% if lang == 'it' -%}Lavori in corso{% else %}Work in progress{% endif -%} 🏗</h3>
{% if lang == 'it' -%}
Il contenuto di questa pagina non è completo; tutti gli articoli e le note in sospeso sono contraddistinte dal tag <a href='/tags#draft' title='tutte le bozze'><em>draft</em></a>

@ -29,7 +29,7 @@
</div>
<div class='flex row'>
<div class=''>
<h4 id='gemini'>♊️ Gemini ♊</h4>
<h4 id='gemini'>♊️ Gemini ♊</h4>
{% if lang == 'it' %}
<p>I miei casini mentali superano i limiti del web convenzionale: tommi.space è navigabile anche <a href='gemini://tommi.space' title='tommi.space su Gemini' rel='alternate' type='text/gemini'>attraverso il protocollo Gemini</a>.</p>
{% else %}

@ -56,7 +56,7 @@
<link rel='me{{ account.attributes }}' href='{{ account.url }}' title='Tommi on {{ account.platform }}'>
{% endif %}
{% endfor %}
<link rel='me pgpkey' href='https://api.protonmail.ch/pks/lookup?op=get&search={{ author.email }}'>
<link rel='me pgpkey' href='https://api.protonmail.ch/pks/lookup?op=get&search={{ site.author.email }}'>
<!-- Gemini version -->
<link rel='alternate' type='text/gemini' title='tommi.space through Gemini' href='gemini://tommi.space'>
@ -76,8 +76,10 @@
<link rel='alternate' type='application/rss+xml' title='Internet Awesomeness feed' href='/internet-awesomeness.xml'>
<link rel='alternate' type='application/json' title='Internet Awesomeness feed' href='/internet-awesomeness.json'>
<!-- Analytics -->
<script async defer data-website-id='67cb7012-b84d-4bc7-afac-ac149d944c1d' src='https://visits.tommi.space/umami.js'></script>
{% if runMode == 'build' %}
<!-- Analytics -->
<script async defer data-website-id='67cb7012-b84d-4bc7-afac-ac149d944c1d' src='https://visits.tommi.space/umami.js'></script>
{% endif %}
<script type='application/ld+json'>
{

@ -7,55 +7,10 @@
{% endif -%}
</h3>
<div class='flex'>
<a onclick='toggleen()' href='javascript:void(0);' title='{% if lang == 'it' -%}Mostra solo articoli in inglese{% else %}Show only posts in English{% endif -%}'>🇬🇧 </a>
<a onclick='toggleit()' href='javascript:void(0);' title='{% if lang == 'it' -%}Mostra solo articoli in italiano{% else %}Show only posts in Italian{% endif -%}'>🇮🇹 </a>
<a onclick='togglefr()' href='javascript:void(0);' title='{% if lang == 'it' -%}Mostra solo articoli in francese{% else %}Show only posts in French{% endif -%}'>🇫🇷 </a>
<a onclick='toggleall()' href='javascript:void(0);' title='{% if lang == 'it' -%}Mostra tutti gli articoli{% else %}Show all the posts{% endif -%}'>🌏</a>
<button onclick='toggleEn();' title='{% if lang == 'it' -%}Mostra solo articoli in inglese{% else %}Show only posts in English{% endif -%}'>🇬🇧 </button>
<button onclick='toggleIt();' title='{% if lang == 'it' -%}Mostra solo articoli in italiano{% else %}Show only posts in Italian{% endif -%}'>🇮🇹 </button>
<button onclick='toggleFr();' title='{% if lang == 'it' -%}Mostra solo articoli in francese{% else %}Show only posts in French{% endif -%}'>🇫🇷 </button>
<button onclick='toggleAll();' title='{% if lang == 'it' -%}Mostra tutti gli articoli{% else %}Show all the posts{% endif -%}'>🌏</a>
</div>
<script>
function toggleit() {
var x = document.querySelectorAll("li[lang='en'], .one .row > a[hreflang='en'], .grid a[hreflang='en'], li[lang='fr'], .one .row > a[hreflang='fr'], .grid a[hreflang='fr']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'none';
}
var x = document.querySelectorAll("li[lang='it'], .one .row > a[hreflang='it'], .grid a[hreflang='it']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'block';
}
}
function toggleen() {
var x = document.querySelectorAll("li[lang='it'], .one .row > a[hreflang='it'], .grid a[hreflang='it'], li[lang='fr'], .one .row > a[hreflang='fr'], .grid a[hreflang='fr']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'block';
}
var x = document.querySelectorAll("li[lang='en'], .one .row > a[hreflang='en'], .grid a[hreflang='en']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'block';
}
}
function togglefr() {
var x = document.querySelectorAll("li[lang='it'], .one .row > a[hreflang='it'], .grid a[hreflang='it'], li[lang='en'], .one .row > a[hreflang='en'], .grid a[hreflang='en']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'none';
}
var x = document.querySelectorAll("li[lang='fr'], .one .row > a[hreflang='fr'], .grid a[hreflang='fr']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'block';
}
}
function toggleall() {
var x = document.querySelectorAll("li[lang='it'], .one .row > a[hreflang='it'], .grid a[hreflang='it'], li[lang='en'], .one .row > a[hreflang='en'], .grid a[hreflang='en'], li[lang='fr'], .one .row > a[hreflang='fr'], .grid a[hreflang='fr']");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.display = 'block';
}
}
</script>
<noscript><p><strong class='red'>{% if lang == 'it' %}JavaScript è diasbilitato: i filtri non funzioneranno{% else %}JavaScript is disabled: filters wont work{% endif %}</strong></p></noscript>
</section>

@ -1,13 +0,0 @@
<noscript>
<div class='yellow banner box center'>
{% if 'it' %}
<h3>🚨JavaScript è disattivato🚨</h3>
Hai disattivato JavaScript. Non c'è problema, ma considera che lo strumento di ricerca ed il bottone per cambiare il tema non funzioneranno.<br>
Per unesperienza completa, <a href='https://www.enable-javascript.com/it/' target='_blank' title='Attiva JavaScript'>attiva JavaScript</a>
{% else %}
<h3>🚨JavaScript is off🚨</h3>
You disabled JavaScript. This is ok, but keep in mind that the global search tool and the theme switcher will not be working.<br>
To experience this website in the best possible way, <a href='https://www.enable-javascript.com/' target='_blank' title='Enable Javascript'>enable JavaScript</a>.
{% endif %}
</div>
</noscript>

@ -1,42 +1,8 @@
<section class='flex box'>
<h2 style='margin-right:1rem'>{% if lang == 'it' %}Condividi{% else %}Share{% endif %}</h2>
<div id='share' class='flex'>
<!-- Copy URL -->
<script>
function Copy(text) {
var inputc = document.body.appendChild(document.createElement('input'));
inputc.value = window.location.href;
inputc.focus();
inputc.select();
document.execCommand('copy');
inputc.parentNode.removeChild(inputc);
alert('{% if lang == 'it' %}URL copiato{% else %}URL has been copied{% endif %}');
}
</script>
<svg title='{% if lang == 'it' %}Copia URL{% else %}Copy URL{% endif %}' onclick='Copy()' class='button' viewBox='0 0 24 24' ><path d='M13.29 9.29l-4 4a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4-4a1 1 0 0 0-1.42-1.42z' fill='var(--background)'/><path d='M12.28 17.4L11 18.67a4.2 4.2 0 0 1-5.58.4 4 4 0 0 1-.27-5.93l1.42-1.43a1 1 0 0 0 0-1.42 1 1 0 0 0-1.42 0l-1.27 1.28a6.15 6.15 0 0 0-.67 8.07 6.06 6.06 0 0 0 9.07.6l1.42-1.42a1 1 0 0 0-1.42-1.42z' fill='var(--background)'/><path d='M19.66 3.22a6.18 6.18 0 0 0-8.13.68L10.45 5a1.09 1.09 0 0 0-.17 1.61 1 1 0 0 0 1.42 0L13 5.3a4.17 4.17 0 0 1 5.57-.4 4 4 0 0 1 .27 5.95l-1.42 1.43a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l1.42-1.42a6.06 6.06 0 0 0-.6-9.06z' fill='var(--background)'/></svg>
<!-- Mastodon --><svg title='Share on Mastodon' onclick='share_on_mastodon();' class='button' width='300' height='300' version='1.1' viewBox='0 0 281.2 281.2' ><rect width='281.2' height='281.2' style='fill:var(--primary);'/><path d='m244.2 161.9c-3.181 16.37-28.49 34.28-57.56 37.75-15.16 1.809-30.08 3.471-46 2.741-26.03-1.192-46.56-6.212-46.56-6.212 0 2.534 0.1562 4.946 0.4688 7.202 3.384 25.69 25.47 27.22 46.39 27.94 21.12 0.7225 39.92-5.206 39.92-5.206l0.8675 19.09s-14.77 7.931-41.08 9.39c-14.51 0.7975-32.52-0.365-53.51-5.919-45.51-12.04-53.33-60.55-54.53-109.8-0.365-14.61-0.14-28.39-0.14-39.92 0-50.33 32.98-65.08 32.98-65.08 16.63-7.636 45.16-10.85 74.82-11.09h0.7288c29.66 0.2425 58.21 3.454 74.84 11.09 0 0 32.98 14.75 32.98 65.08 0 0 0.4138 37.13-4.599 62.92' fill='var(--background)'/><path d='m209.9 102.9v60.94h-24.14v-59.15c0-12.47-5.246-18.8-15.74-18.8-11.6 0-17.42 7.508-17.42 22.35v32.38h-24v-32.38c0-14.85-5.816-22.35-17.42-22.35-10.49 0-15.74 6.329-15.74 18.8v59.15h-24.14v-60.94c0-12.46 3.171-22.35 9.541-29.68 6.569-7.322 15.17-11.08 25.85-11.08 12.36 0 21.71 4.749 27.9 14.25l6.014 10.08 6.015-10.08c6.185-9.499 15.54-14.25 27.9-14.25 10.68 0 19.28 3.754 25.85 11.08 6.369 7.322 9.54 17.22 9.54 29.68' fill='var(--primary)'/></svg>
<script>
function share_on_mastodon() {
var default_url = localStorage['mastodon_instance'];
if (!default_url)
default_url = 'https://';
var instance = prompt('Enter your instances address: (for example mastodon.uno)', default_url);
if (instance) {
if ( !instance.startsWith('https://') && !instance.startsWith('http://') )
instance = 'https://' + instance;
var url = window.location.href;
var title = document.getElementsByTagName('title')[0].innerHTML;
if ( !instance.endsWith('/') )
instance = instance + '/';
localStorage['mastodon_instance'] = instance;
var author = '@tommi@pan.rent';
mastodon_url = instance + 'share?text=' + encodeURIComponent(title + '\n\n' + url + '\n\n' + author);
window.open(mastodon_url, '_blank');
}
}
</script>
<svg id='copyUrl' title='{% if lang == 'it' %}Copia URL{% else %}Copy URL{% endif %}' onclick='copyUrl()' class='button' viewBox='0 0 24 24' ><path d='M13.29 9.29l-4 4a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4-4a1 1 0 0 0-1.42-1.42z' fill='var(--background)'/><path d='M12.28 17.4L11 18.67a4.2 4.2 0 0 1-5.58.4 4 4 0 0 1-.27-5.93l1.42-1.43a1 1 0 0 0 0-1.42 1 1 0 0 0-1.42 0l-1.27 1.28a6.15 6.15 0 0 0-.67 8.07 6.06 6.06 0 0 0 9.07.6l1.42-1.42a1 1 0 0 0-1.42-1.42z' fill='var(--background)'/><path d='M19.66 3.22a6.18 6.18 0 0 0-8.13.68L10.45 5a1.09 1.09 0 0 0-.17 1.61 1 1 0 0 0 1.42 0L13 5.3a4.17 4.17 0 0 1 5.57-.4 4 4 0 0 1 .27 5.95l-1.42 1.43a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l1.42-1.42a6.06 6.06 0 0 0-.6-9.06z' fill='var(--background)'/></svg>
<!-- Mastodon --><svg title='Share via Mastodon' onclick='shareViaMastodon();' class='button' width='300' height='300' version='1.1' viewBox='0 0 281.2 281.2' ><rect width='281.2' height='281.2' style='fill:var(--primary);'/><path d='m244.2 161.9c-3.181 16.37-28.49 34.28-57.56 37.75-15.16 1.809-30.08 3.471-46 2.741-26.03-1.192-46.56-6.212-46.56-6.212 0 2.534 0.1562 4.946 0.4688 7.202 3.384 25.69 25.47 27.22 46.39 27.94 21.12 0.7225 39.92-5.206 39.92-5.206l0.8675 19.09s-14.77 7.931-41.08 9.39c-14.51 0.7975-32.52-0.365-53.51-5.919-45.51-12.04-53.33-60.55-54.53-109.8-0.365-14.61-0.14-28.39-0.14-39.92 0-50.33 32.98-65.08 32.98-65.08 16.63-7.636 45.16-10.85 74.82-11.09h0.7288c29.66 0.2425 58.21 3.454 74.84 11.09 0 0 32.98 14.75 32.98 65.08 0 0 0.4138 37.13-4.599 62.92' fill='var(--background)'/><path d='m209.9 102.9v60.94h-24.14v-59.15c0-12.47-5.246-18.8-15.74-18.8-11.6 0-17.42 7.508-17.42 22.35v32.38h-24v-32.38c0-14.85-5.816-22.35-17.42-22.35-10.49 0-15.74 6.329-15.74 18.8v59.15h-24.14v-60.94c0-12.46 3.171-22.35 9.541-29.68 6.569-7.322 15.17-11.08 25.85-11.08 12.36 0 21.71 4.749 27.9 14.25l6.014 10.08 6.015-10.08c6.185-9.499 15.54-14.25 27.9-14.25 10.68 0 19.28 3.754 25.85 11.08 6.369 7.322 9.54 17.22 9.54 29.68' fill='var(--primary)'/></svg>
<!-- Pocket --><a href='https://getpocket.com/save?url={{ encoded_absolute_url }}&title={{ title | url_encode }}'>
<svg class='button' width='24' height='24' viewBox='0 0 24 24'><path fill-rule='evenodd' clip-rule='evenodd' fill='var(--background)' d='M0.9999,10.6312 L0.9999,4.0682 C0.9999,2.9302 1.9309,2.0002 3.0679,2.0002 L20.9329,2.0002 C22.0699,2.0002 22.9999,2.9302 22.9999,4.0682 L22.9999,10.6312 L22.9999,10.6432 C22.9999,16.7182 18.0749,21.6432 11.9999,21.6432 C5.9249,21.6432 0.9999,16.7182 0.9999,10.6432 L0.9999,10.6312 Z M12.0151,12.0203514 L7.86472144,8.02991037 C7.26754166,7.4557433 6.31797743,7.47439879 5.74381037,8.07157856 C5.1696433,8.66875834 5.18829879,9.61832257 5.78547856,10.1924896 L10.9754786,15.1824896 C11.556135,15.7407701 12.474065,15.7407701 13.0547214,15.1824896 L18.2447214,10.1924896 C18.8419012,9.61832257 18.8605567,8.66875834 18.2863896,8.07157856 C17.7122226,7.47439879 16.7626583,7.4557433 16.1654786,8.02991037 L12.0151,12.0203514 Z'></path></svg>
</a>

@ -0,0 +1,113 @@
let i = 0;
let pageUrl = window.location.href;
let show = 'block';
let hide = 'none';
scrollButton = document.getElementById('scrollButton');
let pageHeight = document.body.scrollHeight;
function scrollButtonBehavior() {
scrollButton.href = 'javascript:void(0);';
if (document.body.scrollTop > 1000 || document.documentElement.scrollTop > 1000) {
scrollButton.title='scroll to top';
scrollButton.setAttribute('aria-label', 'scroll to top');
scrollButton.classList.remove('scrollToBottom');
} else {
scrollButton.title='scroll to bottom';
scrollButton.setAttribute('aria-label', 'scroll to bottom');
scrollButton.classList.add('scrollToBottom');
};
}
function nowScroll() {
if (document.body.scrollTop > 1000 || document.documentElement.scrollTop > 1000) {
window.scrollTo(0, 0);
} else {
window.scrollTo(0, pageHeight);
}
}
function tocBehavior() {
let toc = document.getElementById('toc');
if (toc) {
let footer = document.getElementsByTagName('footer')[0];
let footerHeight = footer.offsetHeight;
let tocHeight = pageHeight - footerHeight - 900; // adding some random pixels to consider margins etc.
if (document.body.scrollTop > tocHeight || document.documentElement.scrollTop > tocHeight) {
toc.style.left = '-19vw';
} else {
toc.style.left = '4vw';
}
}
}
window.onload = function() {
scrollButtonBehavior();
window.onscroll = function() {
tocBehavior();
scrollButtonBehavior();
};
};
/******************
* Language filter *
*******************/
let Italian = document.querySelectorAll(".zibaldone a[hreflang='it'], .grid a[hreflang='it']");
let nonItalian = document.querySelectorAll(".zibaldone a[hreflang='en'], .grid a[hreflang='en'], .zibaldone a[hreflang='fr'], .grid a[hreflang='fr']");
let English = document.querySelectorAll(".zibaldone a[hreflang='en'], .grid a[hreflang='en']");
let nonEnglish = document.querySelectorAll(".zibaldone a[hreflang='it'], .grid a[hreflang='it'], .zibaldone a[hreflang='fr'], .grid a[hreflang='fr']");
let French = document.querySelectorAll(".zibaldone a[hreflang='fr'], .grid a[hreflang='fr']");
let nonFrench = document.querySelectorAll(".zibaldone a[hreflang='it'], .grid a[hreflang='it'], .zibaldone a[hreflang='en'], .grid a[hreflang='en']");
let allLang = document.querySelectorAll(".zibaldone a[hreflang='it'], .grid a[hreflang='it'], .zibaldone a[hreflang='en'], .grid a[hreflang='en'], .zibaldone a[hreflang='fr'], .grid a[hreflang='fr']");
function toggleIt() {
for (i = 0; i < nonItalian.length; i++) {
nonItalian[i].style.display = hide;
}
for (i = 0; i < Italian.length; i++) {
Italian[i].style.display = show;
}
}
function toggleEn() {
for (i = 0; i < nonEnglish.length; i++) {
nonEnglish[i].style.display = hide;
}
for (i = 0; i < English.length; i++) {
English[i].style.display = show;
}
}
function toggleFr() {
for (i = 0; i < nonFrench.length; i++) {
nonFrench[i].style.display = hide;
}
for (i = 0; i < French.length; i++) {
French[i].style.display = show;
}
}
function toggleAll() {
for (i = 0; i < allLang.length; i++) {
allLang[i].style.display = show;
}
}
function copyUrl() {
copyUrlButton = document.getElementById('copyUrl');
navigator.clipboard.writeText(pageUrl);
console.log('copied %s to clipboard', pageUrl);
copyUrlButton.style.background = 'var(--green)';
}
function shareViaMastodon() {
let defaultUrl = localStorage['instanceUrl'];
console.log(defaultUrl);
let instanceUrl= prompt('Enter the address of your server:', defaultUrl);
localStorage['instanceUrl'] = instanceUrl;
if ( !instanceUrl.startsWith('https://') && !instanceUrl.startsWith('http://') ) {
instanceUrl = 'https://' + instanceUrl;
}
if ( !instanceUrl.endsWith('/') ) {
instanceUrl += '/';
}
let author = '@tommi@pan.rent';
let shareUrl = instanceUrl + 'share?text=' + encodeURIComponent(pageUrl + '\n\nby ' + author);
window.open(shareUrl, '_blank');
}

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang='{% if lang == 'it' %}it{% else %}en{% endif %}' xmlns:og='http://opengraphprotocol.org/schema/'>
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<body>
<main class='{{ class }}'>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang='{% if lang == 'it' %}it{% else %}en{% endif %}' xmlns:og='http://opengraphprotocol.org/schema/'>
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<body>
{% if textonly %}

@ -0,0 +1 @@
<div class='wikilink-embed'>{{ content }}</div>

@ -9,10 +9,10 @@
{% endfor %}
{% endif %}
{% render 'head.html', latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
{% render 'head.html', runMode: eleventy.env.runMode, latex: latex, date: date, updated: updated, title: title, description: description, primary: primary, lang: lang, alternate: alternate, accounts: accounts, site: site, url: page.url, layout: layout, isNote: isNote, isPost: isPost, tommi: tommi, image: image %}
<body class='cantiere{% if class %} {{ class }}{% endif %}'>
<a id='scrollbutton' class='tool' href='#' aria-label='scroll to top' title='scroll to top'>
<a id='scrollButton' class='tool' onclick='nowScroll()' href='#' aria-label='scroll to top' title='scroll to top'>
<svg class='button' viewBox='0 0 24 24' style='background:var(--background)' aria-hidden='true'><path d='M18 15a1 1 0 0 1-.64-.23L12 10.29l-5.37 4.32a1 1 0 0 1-1.41-.15 1 1 0 0 1 .15-1.41l6-4.83a1 1 0 0 1 1.27 0l6 5a1 1 0 0 1 .13 1.41A1 1 0 0 1 18 15z' fill='var(--text)'/></svg>
</a>
@ -32,20 +32,6 @@
{% render 'footer.html', lang: lang %}
</div>
<script type='text/javascript'>
scrollbutton = document.getElementById('scrollbutton');
window.onscroll = function() {scroll()};
function scroll() {
if (document.body.scrollTop > 1000 || document.documentElement.scrollTop > 1000) {
scrollbutton.href='#';
scrollbutton.title='scroll to top';
scrollbutton.setAttribute('aria-label', 'scroll to top');
} else {
scrollbutton.href='#0';
scrollbutton.title='scroll to bottom';
scrollbutton.setAttribute('aria-label', 'scroll to bottom');
};
}
</script>
<script src='/index.js' type='text/javascript'></script>
</body>
</html>

@ -1,8 +0,0 @@
[[redirects]]
from = "/*"
to = "http://assets.tommi.space/:splat"
status = 200
[[headers]]
for = "/*"
[headers.values]
cache-control = "max-age=3600"

476
package-lock.json generated

@ -10,6 +10,7 @@
"license": "ISC",
"dependencies": {
"@aloskutov/eleventy-plugin-external-links": "^1.4.0",
"@photogabble/eleventy-plugin-interlinker": "^1.0.0",
"@quasibit/eleventy-plugin-sitemap": "^2.1.5",
"a-sync-waterfall": "^1.0.1",
"abbrev": "^1.1.1",
@ -91,6 +92,7 @@
"engine.io-parser": "^5.0.3",
"entities": "^3.0.1",
"errno": "^1.0.0",
"esbuild": "0.17.12",
"escalade": "^3.1.1",
"escape-html": "^1.0.3",
"escape-string-regexp": "^5.0.0",
@ -767,6 +769,336 @@
"node": ">=4"
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz",
"integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==",
"cpu": [
"arm"
],
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz",
"integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz",
"integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz",
"integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz",
"integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz",
"integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz",
"integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz",
"integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==",
"cpu": [
"arm"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz",
"integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz",
"integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==",
"cpu": [
"ia32"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz",
"integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==",
"cpu": [
"loong64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz",
"integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==",
"cpu": [
"mips64el"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz",
"integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==",
"cpu": [
"ppc64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz",
"integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==",
"cpu": [
"riscv64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz",
"integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==",
"cpu": [
"s390x"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.17.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz",
"integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},