summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--CC-BY-SA-4.0.LICENSE428
-rw-r--r--MIT.LICENSE22
-rw-r--r--README.md28
-rw-r--r--config.toml7
-rw-r--r--content/_index.md40
-rw-r--r--content/blog/01-hello-world/index.md193
-rw-r--r--content/blog/01-hello-world/index.org190
-rw-r--r--content/blog/_index.md6
-rw-r--r--content/publications/dias2021nondlib.pdfbin0 -> 429070 bytes
-rw-r--r--content/publications/index.md61
-rw-r--r--content/publications/jesus2015implicit.pdfbin0 -> 1086090 bytes
-rw-r--r--content/publications/jesus2018finding.pdfbin0 -> 306511 bytes
-rw-r--r--content/publications/jesus2019model.pdfbin0 -> 155999 bytes
-rw-r--r--content/publications/jesus2020algorithm.pdfbin0 -> 591676 bytes
-rw-r--r--content/publications/jesus2020model.pdfbin0 -> 2047324 bytes
-rw-r--r--content/publications/jesus2021design.pdfbin0 -> 759921 bytes
-rw-r--r--content/publications/jesus2021techniques.pdfbin0 -> 99184 bytes
-rw-r--r--content/software/index.md58
-rw-r--r--content/teaching/index.md31
-rw-r--r--flake.lock43
-rw-r--r--flake.nix56
-rw-r--r--sass/main.scss143
-rw-r--r--templates/404.html5
-rw-r--r--templates/base.html89
-rw-r--r--templates/blog.html13
-rw-r--r--templates/index.html8
-rw-r--r--templates/page.html11
28 files changed, 1437 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4a21fb5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+/.direnv/
+/.envrc
+/result
+/public/
+\.#*
diff --git a/CC-BY-SA-4.0.LICENSE b/CC-BY-SA-4.0.LICENSE
new file mode 100644
index 0000000..869b083
--- /dev/null
+++ b/CC-BY-SA-4.0.LICENSE
@@ -0,0 +1,428 @@
+Attribution-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm
+and does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are intended
+ for use by those authorized to give the public permission to use
+ material in ways otherwise restricted by copyright and certain
+ other rights. Our licenses are irrevocable. Licensors should read
+ and understand the terms and conditions of the license they
+ choose before applying it. Licensors should also secure all
+ rights necessary before applying our licenses so that the public
+ can reuse the material as expected. Licensors should clearly mark
+ any material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If the
+ licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain other
+ rights that a licensor has authority to grant. Use of the
+ licensed material may still be restricted for other reasons,
+ including because others have copyright or other rights in the
+ material. A licensor may make special requests, such as asking
+ that all changes be marked or described. Although not required
+ by our licenses, you are encouraged to respect those requests
+ where reasonable. More_considerations for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-ShareAlike 4.0 International Public
+License
+
+By exercising the Licensed Rights (defined below), You accept and
+agree to be bound by the terms and conditions of this Creative Commons
+Attribution-ShareAlike 4.0 International Public License ("Public
+License"). To the extent this Public License may be interpreted as a
+contract, You are granted the Licensed Rights in consideration of Your
+acceptance of these terms and conditions, and the Licensor grants You
+such rights in consideration of benefits the Licensor receives from
+making the Licensed Material available under these terms and
+conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner
+ requiring permission under the Copyright and Similar Rights held
+ by the Licensor. For purposes of this Public License, where the
+ Licensed Material is a musical work, performance, or sound
+ recording, Adapted Material is always produced where the Licensed
+ Material is synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar
+ rights closely related to copyright including, without
+ limitation, performance, broadcast, sound recording, and Sui
+ Generis Database Rights, without regard to how the rights are
+ labeled or categorized. For purposes of this Public License, the
+ rights specified in Section 2(b)(1)-(2) are not Copyright and
+ Similar Rights.
+
+ e. Effective Technological Measures means those measures that, in
+ the absence of proper authority, may not be circumvented under
+ laws fulfilling obligations under Article 11 of the WIPO
+ Copyright Treaty adopted on December 20, 1996, and/or similar
+ international agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of
+ this Public License are Attribution and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance,
+ distribution, dissemination, communication, or importation, and
+ to make material available to the public including in ways that
+ members of the public may access the material from a place and at
+ a time individually chosen by them.
+
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and
+ of the Council of 11 March 1996 on the legal protection of
+ databases, as amended and/or succeeded, as well as other
+ essentially equivalent rights anywhere in the world.
+
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt,
+ where Exceptions and Limitations apply to Your use, this
+ Public License does not apply, and You do not need to comply
+ with its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in
+ Section 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter
+ created, and to make technical modifications necessary to do
+ so. The Licensor waives and/or agrees not to assert any
+ right or authority to forbid You from making technical
+ modifications necessary to exercise the Licensed Rights,
+ including technical modifications necessary to circumvent
+ Effective Technological Measures. For purposes of this
+ Public License, simply making modifications authorized by
+ this Section 2(a) (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You
+ apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes
+ or may be construed as permission to assert or imply that
+ You are, or that Your use of the Licensed Material is,
+ connected with, or sponsored, endorsed, or granted official
+ status by, the Licensor or others designated to receive
+ attribution as provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however,
+ to the extent possible, the Licensor waives and/or agrees
+ not to assert any such rights held by the Licensor to the
+ limited extent necessary to allow You to exercise the
+ Licensed Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may
+ be reasonable to satisfy the conditions by providing a URI
+ or hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also
+ apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to,
+ the Adapter's License You apply. You may satisfy this
+ condition in any reasonable manner based on the medium,
+ means, and context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different
+ terms or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+
+ including for purposes of Section 3(b); and c. You must comply
+ with the conditions in Section 3(a) if You Share all or a
+ substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL
+ OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated
+ under Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured,
+ provided it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could
+ lawfully be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License
+ is deemed unenforceable, it shall be automatically reformed to
+ the minimum extent necessary to make it enforceable. If the
+ provision cannot be reformed, it shall be severed from this
+ Public License without affecting the enforceability of the
+ remaining terms and conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
diff --git a/MIT.LICENSE b/MIT.LICENSE
new file mode 100644
index 0000000..84ee5ae
--- /dev/null
+++ b/MIT.LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2022 Alexandre D. B. Jesus
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..93a9766
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# Source code for my personal website
+
+### About
+
+This repository contains the source code for my personal website
+available at [https://adbjesus.com].
+
+### Build
+
+First install [Zola](https://getzola.org) on your system. Then, run
+`zola build` to build the website to the `public/` folder for
+deployment, or run `zola serve` to serve it locally.
+
+##### Nix
+
+If you're using nix (with flakes), you can run `nix develop` to get a
+development shell with everything that is needed. You can also use
+`nix build` to build the website, or `nix run` to serve locally.
+
+### License
+
+The source code of the website is under the MIT License, and available
+at <https://git.adbjesus.com/website>.
+
+The contents of the website are licensed under the [CC BY-SA
+4.0](https://creativecommons.org/licenses/by-sa/4.0) license, except
+for the PDFs in the `content/publications` folder or if otherwise
+explicitly noted.
diff --git a/config.toml b/config.toml
new file mode 100644
index 0000000..d4c927a
--- /dev/null
+++ b/config.toml
@@ -0,0 +1,7 @@
+base_url = "https://adbjesus.com"
+
+title = "A.D.B. Jesus"
+
+compile_sass = true
+
+feed_limit = 10
diff --git a/content/_index.md b/content/_index.md
new file mode 100644
index 0000000..9a0ca4e
--- /dev/null
+++ b/content/_index.md
@@ -0,0 +1,40 @@
++++
+title = "About"
++++
+
+I'm a PhD student at the University of Coimbra and University of Lille
+under a co-tutelle program advised by [Luís
+Paquete](https://eden.dei.uc.pt/~paquete), [Arnaud
+Liefooghe](https://sites.google.com/site/arnaudliefooghe/) and [Bilel
+Derbel](https://sites.google.com/site/bilelderbelpro/). I'm also
+working as an Invited Assistant at the University of Coimbra, part of
+the [ALGO](https://algo.dei.uc.pt/) research lab, and a member of the
+[TOPDEI](https://top.dei.uc.pt) project that is preparing students for
+programming competitions. Previously, I worked as a full stack
+developer at [Whitesmith](https://whitesmith.co).
+
+Research-wise I'm mainly interested in Multi-Objective Optimization,
+Combinatorial Optimization, Anytime Algorithms, Automated Algorithm
+Selection, Automated Algorithm Configuration, and Reproducibility. I
+am also moderately interested in Compilers, Distributed Computing, and
+High-Performance Computing (HPC).
+
+Technology-wise I'm mainly working with Linux, Emacs, C/C++, Rust, R,
+Python, Nix, GLPK, Slurm, and SQLite.
+
+### Email
+
+- Personal: [public@adbjesus.com](mailto:public@adbjesus.com)
+- Professional: [ajesus@dei.uc.pt](mailto:ajesus@dei.uc.pt)
+
+Please [use plaintext](https://useplaintext.email/) when contacting
+me.
+
+### Around the Web
+
+* [ORCID](https://orcid.org/0000-0001-7691-0295)
+* [Scholar](https://scholar.google.com/citations?user=D2me-IYAAAAJ&hl=en)
+* [Research Gate](https://www.researchgate.net/profile/Alexandre_Jesus2)
+* [Github](https://github.com/adbjesus)
+
+
diff --git a/content/blog/01-hello-world/index.md b/content/blog/01-hello-world/index.md
new file mode 100644
index 0000000..e0aaefe
--- /dev/null
+++ b/content/blog/01-hello-world/index.md
@@ -0,0 +1,193 @@
+---
+author: A.D.B. Jesus
+date: 2022-08-29
+slug: hello-world
+title: Hello, world!
+---
+
+I have been thinking of starting a blog for a while, mostly to write
+about stuff that makes no sense to publish academically, but also to
+improve my writing skills. I expect to mostly write about Programming,
+Emacs, Linux, and other tech topics. But we will see where it goes.
+
+In this first post I will quickly go over the implementation and
+deployment of this site. Note that, you can find the code for this site
+at <https://git.adbjesus.com/website>.
+
+### Static Site Generator
+
+Since this site will contain static content, I've decided to go with a
+static site generator. In particular, I chose
+[Zola](https://getzola.org). The main reason for using Zola and not
+something else is that I am familiar with its implementation language
+(Rust). This can allow me to easily contribute to the project to fix any
+issue or scratch any itch.
+
+In terms of styling, I'm using simple templates and CSS I implemented
+myself, which match the light/dark system theme option set by the user.
+Something I am not yet doing, is using syntax highlighting for code in
+blog posts. Although Zola supports this, it does not support some of the
+languages that I want, such as Emacs Lisp and Nix, and it is using old
+and buggy Sublime syntaxes. There is currently an [open
+issue](https://github.com/getzola/zola/issues/1787) to replace the
+current system. Another option, would be to use a javascript based
+syntax highlighter. However, I would rather keep my site
+javascript-free. As a result, since I don't consider it to be a critical
+feature for now, I will not implement any syntax highlighting for the
+time being.
+
+### Using Org
+
+One issue I had with Zola is that it does not suppor
+[Org](https://orgmode.org) for writing content (see this
+[issue](https://github.com/getzola/zola/issues/909)). However, I would
+prefer to use it instead of markdown because I prefer and am more
+comfortable with its syntax, but also because I want to be able to use
+[Org Babel](https://orgmode.org/worg/org-contrib/babel/) to execute code
+within the `.org` file directly when writing posts for which executing
+code is useful.
+
+Nonetheless, this proved not to be an issue for my simple use case
+because I can automatically convert `.org` files to `.md` files
+(following the [CommonMark](https://commonmark.org/) spec) using
+[pandoc](https://pandoc.org), and the
+[ox-pandoc](https://github.com/emacsorphanage/ox-pandoc) package for
+Emacs. To setup ox-pandoc to export `.org` files to CommonMark I have
+the following in my Emacs configuration:
+
+``` elisp
+(use-package ox-pandoc
+ :ensure t
+ :after org
+ :custom
+ (org-pandoc-menu-entry
+ '((?c "to cmk." org-pandoc-export-to-commonmark)
+ (?C "to cmk and open." org-pandoc-export-to-commonmark-and-open))))
+```
+
+Then, I put the `index.org` for a blog post inside a dedicated folder
+for that post:
+
+``` example
+content
+└── blog
+ └── 01-hello-world
+ ├── index.org
+ └── ... // other files
+```
+
+The `index.org` file includes some metadata in its header for both Zola
+and ox-pandoc. For example, for this post I'm using the following
+header:
+
+``` org
+#+TITLE: Hello, world!
+#+DATE: 2022-08-25
+#+PANDOC_METADATA: slug:hello-world
+#+PANDOC_EXTENSIONS: commonmark+yaml_metadata_block
+#+PANDOC_OPTIONS: standalone:t
+#+PANDOC_OPTIONS: shift-heading-level-by:2
+```
+
+The `TITLE`, `DATE`, and `PANDOC_METADATA` fields are added to the
+exported markdown metadata block. To add the metadata block to the
+generated markdown file we set the `yaml_metadata_block` pandoc
+extension in `PANDOC_EXTENSIONS`, and the `standalone:t` option in
+`PANDOC_OPTIONS`. The last line is used to start the generated headings'
+levels at 3 for styling purposes.
+
+Finally, I use the `C-c C-e p c` shortcut to generate the markdown file,
+which goes into the same folder, i.e.:
+
+``` example
+content
+└── blog
+ └── 01-hello-world
+ ├── index.org
+ ├── index.md
+ └── ... // other files
+```
+
+You can find the Org source for this post [here](index.org).
+
+### Deploying with Nix
+
+I deploy this site to my [NixOS](https://nixos.org) server using the
+declarative NixOS configuration capabilities. For this I have a
+`flake.nix` in the repository of this site:
+
+``` nix
+{
+ description = "My personal website";
+
+ inputs = {
+ nixpkgs = {
+ url = "github:nixos/nixpkgs/nixos-22.05";
+ };
+
+ flake-utils = {
+ url = "github:numtide/flake-utils";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = { self, nixpkgs, flake-utils }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = import nixpkgs { inherit system; };
+ in rec {
+ packages.website =
+ pkgs.stdenv.mkDerivation {
+ name = "website";
+ src = self;
+
+ buildInputs = [ pkgs.zola ];
+
+ buildPhase = ''
+ zola build
+ '';
+
+ installPhase = ''
+ mkdir -p $out cp -Tr public $out/public
+ '';
+ };
+
+ packages.default = self.packages.${system}.website;
+ }
+ );
+}
+```
+
+Then I add this repository to the inputs section of the NixOS
+`flake.nix` configuration file.
+
+``` nix
+inputs.website = {
+ url = "git+https://git.adbjesus.com/website";
+ inputs.nixpkgs.follows = "nixpkgs";
+};
+```
+
+and use the `nginx.virtualHosts` option to deploy it:
+
+``` nix
+nginx.virtualHosts = {
+ "adbjesus.com" = {
+ default = true;
+ forceSSL = true;
+ enableACME = true;
+ locations = {
+ "/" = {
+ root = "${inputs.website.packages.${system}.website}/public";
+ extraConfig = ''
+ add_header Last-Modified "${toDateTime inputs.website.lastModified}";
+ add_header Cache-Control max-age="${toString (60 * 60 * 24)}";
+ '';
+ };
+ };
+ };
+};
+```
+
+In the future, I will write more about my NixOS configuration using
+flakes, which I use to manage my personal computers and server.
diff --git a/content/blog/01-hello-world/index.org b/content/blog/01-hello-world/index.org
new file mode 100644
index 0000000..aa51773
--- /dev/null
+++ b/content/blog/01-hello-world/index.org
@@ -0,0 +1,190 @@
+#+TITLE: Hello, world!
+#+DATE: 2022-08-29
+#+AUTHOR: A.D.B. Jesus
+#+PANDOC_METADATA: slug:hello-world
+#+PANDOC_EXTENSIONS: commonmark+yaml_metadata_block
+#+PANDOC_OPTIONS: standalone:t
+#+PANDOC_OPTIONS: shift-heading-level-by:2
+#+SPDX-FileCopyrightText: 2022 A.D.B. Jesus <https://adbjesus.com>
+#+SPDX-License-Identifier: CC-BY-SA-4.0
+
+I have been thinking of starting a blog for a while, mostly to write
+about stuff that makes no sense to publish academically, but also to
+improve my writing skills. I expect to mostly write about Programming,
+Emacs, Linux, and other tech topics. But we will see where it goes.
+
+In this first post I will quickly go over the implementation and
+deployment of this site. Note that, you can find the code for this
+site at https://git.adbjesus.com/website.
+
+* Static Site Generator
+
+Since this site will contain static content, I've decided to go with a
+static site generator. In particular, I chose [[https://getzola.org][Zola]]. The main reason
+for using Zola and not something else is that I am familiar with its
+implementation language (Rust). This can allow me to easily contribute
+to the project to fix any issue or scratch any itch.
+
+In terms of styling, I'm using simple templates and CSS I implemented
+myself, which match the light/dark system theme option set by the
+user. Something I am not yet doing, is using syntax highlighting for
+code in blog posts. Although Zola supports this, it does not support
+some of the languages that I want, such as Emacs Lisp and Nix, and it
+is using old and buggy Sublime syntaxes. There is currently an [[https://github.com/getzola/zola/issues/1787][open
+issue]] to replace the current system. Another option, would be to use a
+javascript based syntax highlighter. However, I would rather keep my
+site javascript-free. As a result, since I don't consider it to be a
+critical feature for now, I will not implement any syntax highlighting
+for the time being.
+
+* Using Org
+
+One issue I had with Zola is that it does not suppor [[https://orgmode.org][Org]] for writing
+content (see this [[https://github.com/getzola/zola/issues/909][issue]]). However, I would prefer to use it instead of
+markdown because I prefer and am more comfortable with its syntax, but
+also because I want to be able to use [[https://orgmode.org/worg/org-contrib/babel/][Org Babel]] to execute code within
+the =.org= file directly when writing posts for which executing code
+is useful.
+
+Nonetheless, this proved not to be an issue for my simple use case
+because I can automatically convert =.org= files to =.md= files
+(following the [[https://commonmark.org/][CommonMark]] spec) using [[https://pandoc.org][pandoc]], and the [[https://github.com/emacsorphanage/ox-pandoc][ox-pandoc]]
+package for Emacs. To setup ox-pandoc to export =.org= files to
+CommonMark I have the following in my Emacs configuration:
+
+#+begin_src elisp :eval no
+(use-package ox-pandoc
+ :ensure t
+ :after org
+ :custom
+ (org-pandoc-menu-entry
+ '((?c "to cmk." org-pandoc-export-to-commonmark)
+ (?C "to cmk and open." org-pandoc-export-to-commonmark-and-open))))
+#+end_src
+
+Then, I put the =index.org= for a blog post inside a dedicated folder
+for that post:
+
+#+begin_example
+content
+└── blog
+ └── 01-hello-world
+ ├── index.org
+ └── ... // other files
+#+end_example
+
+The =index.org= file includes some metadata in its header for both
+Zola and ox-pandoc. For example, for this post I'm using the following
+header:
+
+#+begin_src org :eval no
+#+TITLE: Hello, world!
+#+DATE: 2022-08-25
+#+PANDOC_METADATA: slug:hello-world
+#+PANDOC_EXTENSIONS: commonmark+yaml_metadata_block
+#+PANDOC_OPTIONS: standalone:t
+#+PANDOC_OPTIONS: shift-heading-level-by:2
+#+end_src
+
+The =TITLE=, =DATE=, and =PANDOC_METADATA= fields are added to the
+exported markdown metadata block. To add the metadata block to the
+generated markdown file we set the =yaml_metadata_block= pandoc
+extension in =PANDOC_EXTENSIONS=, and the =standalone:t= option in
+=PANDOC_OPTIONS=. The last line is used to start the generated
+headings' levels at 3 for styling purposes.
+
+Finally, I use the =C-c C-e p c= shortcut to generate the markdown file,
+which goes into the same folder, i.e.:
+
+#+begin_example
+content
+└── blog
+ └── 01-hello-world
+ ├── index.org
+ ├── index.md
+ └── ... // other files
+#+end_example
+
+You can find the Org source for this post [[file:index.org][here]].
+
+* Deploying with Nix
+
+I deploy this site to my [[https://nixos.org][NixOS]] server using the declarative NixOS
+configuration capabilities. For this I have a =flake.nix= in the
+repository of this site:
+
+#+begin_src nix
+{
+ description = "My personal website";
+
+ inputs = {
+ nixpkgs = {
+ url = "github:nixos/nixpkgs/nixos-22.05";
+ };
+
+ flake-utils = {
+ url = "github:numtide/flake-utils";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = { self, nixpkgs, flake-utils }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = import nixpkgs { inherit system; };
+ in rec {
+ packages.website =
+ pkgs.stdenv.mkDerivation {
+ name = "website";
+ src = self;
+
+ buildInputs = [ pkgs.zola ];
+
+ buildPhase = ''
+ zola build
+ '';
+
+ installPhase = ''
+ mkdir -p $out cp -Tr public $out/public
+ '';
+ };
+
+ packages.default = self.packages.${system}.website;
+ }
+ );
+}
+#+end_src
+
+Then I add this repository to the inputs section of the NixOS
+=flake.nix= configuration file.
+
+#+begin_src nix
+inputs.website = {
+ url = "git+https://git.adbjesus.com/website";
+ inputs.nixpkgs.follows = "nixpkgs";
+};
+#+end_src
+
+and use the =nginx.virtualHosts= option to deploy it:
+
+#+begin_src nix
+nginx.virtualHosts = {
+ "adbjesus.com" = {
+ default = true;
+ forceSSL = true;
+ enableACME = true;
+ locations = {
+ "/" = {
+ root = "${inputs.website.packages.${system}.website}/public";
+ extraConfig = ''
+ add_header Last-Modified "${toDateTime inputs.website.lastModified}";
+ add_header Cache-Control max-age="${toString (60 * 60 * 24)}";
+ '';
+ };
+ };
+ };
+};
+#+end_src
+
+In the future, I will write more about my NixOS configuration using
+flakes, which I use to manage my personal computers and server.
diff --git a/content/blog/_index.md b/content/blog/_index.md
new file mode 100644
index 0000000..e6aaf2f
--- /dev/null
+++ b/content/blog/_index.md
@@ -0,0 +1,6 @@
++++
+title = "Blog"
+sorted_by = "date"
+template = "blog.html"
+generate_feed = true
++++
diff --git a/content/publications/dias2021nondlib.pdf b/content/publications/dias2021nondlib.pdf
new file mode 100644
index 0000000..8a3a888
--- /dev/null
+++ b/content/publications/dias2021nondlib.pdf
Binary files differ
diff --git a/content/publications/index.md b/content/publications/index.md
new file mode 100644
index 0000000..df1f564
--- /dev/null
+++ b/content/publications/index.md
@@ -0,0 +1,61 @@
++++
+title = "Publications"
++++
+
+### Journal Articles
+
+- **A. D. Jesus**, L. Paquete, and A. Liefooghe, &ldquo;A model of
+ anytime algorithm performance for bi-objective optimization&rdquo;,
+ _Journal of Global Optimization_, vol. 79, pp. 329–350, Feb. 2021.
+ [DOI](https://doi.org/10.1007/s10898-020-00909-9) ::
+ [PDF](jesus2020model.pdf)
+- **A. D. Jesus**, L. Paquete, and J. R. Figueira. &ldquo;Finding
+ representations for an unconstrained bi-objective combinatorial
+ optimization problem&rdquo;, _Optimization Letters_, vol. 12, pp.
+ 321-334, March 2018.
+ [DOI](https://doi.org/10.1007/s11590-017-1129-6) ::
+ [PDF](jesus2018finding.pdf)
+
+### Conference Articles
+
+- **A. D. Jesus**, L. Paquete, B. Derbel, and A. Liefooghe, &ldquo;On
+ the design and anytime performance of indicator-based branch and
+ bound for multi-objective combinatorial optimization&rdquo;, in
+ _Proceedings of the 2021 Genetic and Evolutionary Computation
+ Conference (GECCO '21)_, pp. 234-242, June 2021.
+ [DOI](https://doi.org/10.1145/3449639.3459360) ::
+ [PDF](jesus2021design.pdf)
+- **A. D. Jesus**, A. Liefooghe, B. Derbel, and L. Paquete,
+ &ldquo;Algorithm Selection of Anytime Algorithms&rdquo;, in
+ _Proceedings of the 2020 Genetic and Evolutionary Computation
+ Conference (GECCO '20)_, pp. 850-858, June 2020.
+ [DOI](https://doi.org/10.1145/3377930.3390185) ::
+ [PDF](jesus2020algorithm.pdf)
+
+### (Extended) Abstracts
+
+- **A. D. Jesus**, L. Paquete, A. Liefooghe, and B. Derbel,
+ &ldquo;Techniques to analyze the anytime behavior of algorithms for
+ multi-objective optimization&rdquo;, in _31st European Conference on
+ Operational Research (EURO 2021)_, July 2021.
+ [PDF](jesus2021techniques.pdf)
+- D. M. Dias, **A. D. Jesus**, and L. Paquete, &ldquo;A software
+ library for archiving nondominated points&rdquo;, in _Proceedings of
+ the 2021 Genetic and Evolutionary Computation Conference Companion
+ (GECCO '21)_, pp. 53-54, June 2021.
+ [DOI](https://doi.org/10.1145/3449726.3462737) ::
+ [PDF](dias2021nondlib.pdf)
+- **A. D. Jesus**, L. Paquete, A. Liefooghe. &ldquo;A model of anytime
+ algorithm performance for biobjective optimization problems&rdquo;,
+ in _Proceedings of the 14th International Global Optimization
+ Workshop (LeGO 2018)_, AIP Conference Proceedings 2070(1),
+ p. 020049, Feb. 2019. [DOI](https://doi.org/10.1063/1.5090016) ::
+ [PDF](jesus2019model.pdf)
+
+### Theses
+
+- **A. D. B. Jesus**, &ldquo;Implicit Enumeration for Representation
+ Systems in Multi-objective Optimization&rdquo;, MSc thesis,
+ University of Coimbra, Sep. 2015.
+ [Handle](https://hdl.handle.net/10316/35604) ::
+ [PDF](jesus2015implicit.pdf)
diff --git a/content/publications/jesus2015implicit.pdf b/content/publications/jesus2015implicit.pdf
new file mode 100644
index 0000000..36b9309
--- /dev/null
+++ b/content/publications/jesus2015implicit.pdf
Binary files differ
diff --git a/content/publications/jesus2018finding.pdf b/content/publications/jesus2018finding.pdf
new file mode 100644
index 0000000..4474004
--- /dev/null
+++ b/content/publications/jesus2018finding.pdf
Binary files differ
diff --git a/content/publications/jesus2019model.pdf b/content/publications/jesus2019model.pdf
new file mode 100644
index 0000000..35bcccc
--- /dev/null
+++ b/content/publications/jesus2019model.pdf
Binary files differ
diff --git a/content/publications/jesus2020algorithm.pdf b/content/publications/jesus2020algorithm.pdf
new file mode 100644
index 0000000..baa70bd
--- /dev/null
+++ b/content/publications/jesus2020algorithm.pdf
Binary files differ
diff --git a/content/publications/jesus2020model.pdf b/content/publications/jesus2020model.pdf
new file mode 100644
index 0000000..29bd249
--- /dev/null
+++ b/content/publications/jesus2020model.pdf
Binary files differ
diff --git a/content/publications/jesus2021design.pdf b/content/publications/jesus2021design.pdf
new file mode 100644
index 0000000..532b6ad
--- /dev/null
+++ b/content/publications/jesus2021design.pdf
Binary files differ
diff --git a/content/publications/jesus2021techniques.pdf b/content/publications/jesus2021techniques.pdf
new file mode 100644
index 0000000..1575e10
--- /dev/null
+++ b/content/publications/jesus2021techniques.pdf
Binary files differ
diff --git a/content/software/index.md b/content/software/index.md
new file mode 100644
index 0000000..045624e
--- /dev/null
+++ b/content/software/index.md
@@ -0,0 +1,58 @@
++++
+title = "Software"
++++
+
+### mooutils
+
+ C++ library containing several utilities to aid in the
+ implementation of multi-objective optimization algorithms, such as:
+ quality indicators, dominance relations, sets of non-dominated
+ points/solutions, queues of solutions.
+
+ [Github](https://github.com/adbjesus/mooutils),
+ [Zenodo](https://doi.org/10.5281/zenodo.6855878)
+
+### mobkp
+
+ C++ library and solver for the multi-objective binary knapsack
+ problem, which includes several state of the art algorithms.
+
+ [Github](https://github.com/adbjesus/mobkp),
+ [Zenodo](https://doi.org/10.5281/zenodo.6857685)
+
+### anytime
+
+ R library to help analyze the anytime behavior of algorithms, which
+ provides several publication ready `ggplot2` plots, and a scalar
+ measure of anytime performance.
+
+ [Github](https://github.com/adbjesus/anytime),
+ [Zenodo](https://doi.org/10.5281/zenodo.6856119)
+
+### nondLib
+
+ C++ library for building and updatings sets of nondominated points,
+ providing several methods to filter the nondominated points from a
+ larger set, and a method to add nondominated points to a set.
+
+ [Github](https://github.com/TLDart/nondLib),
+ [Zenodo](https://doi.org/10.5281/zenodo.4733026)
+
+### apm
+
+ C++ library and binary for computing models of anytime
+ performance. Currently, it supports a theoretical model of anytime
+ performance for bi-objective anytime algorithms that find at each
+ iteration a solution to a bi-objective problem.
+
+ [Github](https://github.com/adbjesus/apm),
+ [Zenodo](https://doi.org/10.5281/zenodo.6856094)
+
+### moco\_abm
+
+ Rust library and binary to compute the ideal anytime behavior
+ theoretical model for bi-objective anytime algorithms that collect
+ an efficient solution at each iteration.
+
+ [Github](https://github.com/adbjesus/moco_abm),
+ [Zenodo](https://doi.org/10.5281/zenodo.2551046)
diff --git a/content/teaching/index.md b/content/teaching/index.md
new file mode 100644
index 0000000..1a98c38
--- /dev/null
+++ b/content/teaching/index.md
@@ -0,0 +1,31 @@
++++
+title = "Teaching"
++++
+
+### MSc
+
+- Experimental Methods in Computer Science
+ - [2022-2023](https://apps.uc.pt/courses/EN/unit/88863/20328/2022-2023)
+ - [2021-2022](https://apps.uc.pt/courses/EN/unit/88863/20328/2021-2022)
+ - [2020-2021](https://apps.uc.pt/courses/EN/unit/88863/20328/2020-2021)
+
+### BSc
+
+- Algorithmic Strategies (previously Advanced Programming Laboratory)
+ - [2021-2022](https://apps.uc.pt/courses/EN/unit/89047/20442/2021-2022)
+ - [2020-2021](https://apps.uc.pt/courses/EN/unit/89047/20442/2020-2021)
+ - [2017-2018](https://apps.uc.pt/courses/EN/unit/9865/669/2017-2018)
+- Compilers
+ - [2022-2023](https://apps.uc.pt/courses/EN/unit/9863/669/2022-2023)
+ - [2021-2022](https://apps.uc.pt/courses/EN/unit/9863/669/2021-2022)
+ - [2016-2017](https://apps.uc.pt/courses/EN/unit/9863/669/2016-2017)
+- Data Structures and Algorithms
+ - [2020-2021](https://apps.uc.pt/courses/EN/unit/9854/20442/2020-2021)
+- Introduction to Procedural Programming
+ - [2021-2022](https://apps.uc.pt/courses/EN/unit/9843/20442/2021-2022)
+ - [2020-2021](https://apps.uc.pt/courses/EN/unit/9843/20442/2020-2021)
+
+### Other
+
+- Introduction to Programming in Java
+ - [2013-2014](https://apps.uc.pt/courses/EN/unit/78102/14301/2013-2014)
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..298ad27
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,43 @@
+{
+ "nodes": {
+ "flake-utils": {
+ "locked": {
+ "lastModified": 1659877975,
+ "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1661187878,
+ "narHash": "sha256-/wCqoQB1BsaVi4nb8Iz0PreeBNMTim0p78NLtyWejFE=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "52527082ea267fe486f0648582d57c85486b2031",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-22.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..8a993c3
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,56 @@
+{
+ description = "My personal website";
+
+ inputs = {
+ nixpkgs = {
+ url = "github:nixos/nixpkgs/nixos-22.05";
+ };
+
+ flake-utils = {
+ url = "github:numtide/flake-utils";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = { self, nixpkgs, flake-utils }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = import nixpkgs { inherit system; };
+ in rec {
+ packages.website = pkgs.stdenv.mkDerivation {
+ name = "website";
+ src = self;
+
+ buildInputs = [ pkgs.zola ];
+
+ buildPhase = ''
+ zola build
+ '';
+
+ installPhase = ''
+ mkdir -p $out
+ cp -Tr public $out/public
+ '';
+ };
+
+ packages.default = self.packages.${system}.website;
+
+ apps.default = flake-utils.lib.mkApp {
+ drv = pkgs.writeShellApplication {
+ name = "serve";
+
+ runtimeInputs = [ pkgs.zola ];
+
+ text = ''
+ zola serve
+ '';
+ };
+ };
+
+ devShells.default = pkgs.mkShell {
+ inputsFrom = [ self.packages.${system}.website ];
+ };
+ }
+ );
+}
+
diff --git a/sass/main.scss b/sass/main.scss
new file mode 100644
index 0000000..5c03760
--- /dev/null
+++ b/sass/main.scss
@@ -0,0 +1,143 @@
+:root {
+ --bg-color: #F8F8F8;
+ --fg-color: #383838;
+ --links-color: #383838;
+ --links-hover-color: #585858;
+ --heading-color: #254070;
+ --selected-navli-color: #AC4142;
+ --unselected-navli-color: #254070;
+ --code-bg-color: #E8E8E8;
+ --code-fg-color: #383838;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --bg-color: #1B2B34;
+ --fg-color: #C0C5CE;
+ --links-color: #6699CC;
+ --links-hover-color: #5FB3B3;
+ --heading-color: #CDD3DE;
+ --selected-navli-color: #C0C5CE;
+ --unselected-navli-color: #F99157;
+ --code-bg-color: #2B3B44;
+ --code-fg-color: #C0C5CE;
+ }
+}
+
+* {
+ font-family: "Fira Sans", sans-serif;
+ padding: 0;
+ margin: 0;
+}
+
+body {
+ background-color: var(--bg-color);
+ color: var(--fg-color);
+ font-size: 13pt;
+ line-height: 1.5;
+ max-width: 700px;
+ margin: 0 auto;
+ text-rendering: optimizelegibility;
+ word-wrap: break-word;
+}
+
+@media (max-width: 700px) {
+ body {
+ margin: 0 2ex;
+ }
+}
+
+h1, h2, h3, h4, h5, h6, hr {
+ margin-top: 0.8em;
+ color: var(--heading-color);
+}
+
+footer {
+ margin-top: 1em;
+ margin-bottom: 1em;
+ border-top-width: 1px;
+ border-top-style: solid;
+ border-top-color: var(--heading-color);
+ font-size: 12pt;
+}
+
+.navbar {
+ padding-top: 0.8em;
+ font-size: 14pt;
+}
+
+.navbar ul {
+ margin: 0;
+ padding: 0;
+}
+
+.navbar li {
+ display: inline;
+ margin: 0 2ex 0 0;
+}
+
+.navbar-unselected {
+ color: var(--unselected-navli-color);
+}
+
+.navbar-unselected:hover {
+ color: var(--selected-navli-color);
+}
+
+.navbar-selected {
+ color: var(--selected-navli-color);
+}
+
+.navbar-selected:hover {
+ color: var(--selected-navli-color);
+}
+
+a {
+ color: var(--links-color);
+ text-decoration: underline;
+}
+
+a:hover {
+ color: var(--links-hover-color);
+ text-decoration: underline;
+}
+
+main p, footer p {
+ padding-top: 0.7em;
+}
+
+main ul, ol {
+ padding-top: 0.5em;
+ padding-left: 2.5ex;
+}
+
+main li ul {
+ padding-top: 0em;
+}
+
+main li {
+ padding-top: 0.2em;
+}
+
+code {
+ background-color: var(--code-bg-color);
+ color: var(--code-fg-color);
+ font-family: "Fira Mono", monospace;
+ font-size: 0.9em;
+ padding: 0.1em 0.4ex;
+ border-radius: 4px;
+}
+
+pre {
+ background-color: var(--code-bg-color);
+ color: var(--code-fg-color);
+ margin-top: 0.7em;
+ padding: 0.2em 1.0ex;
+ border-radius: 4px;
+ overflow-x: auto;
+}
+
+pre code {
+ padding: 0;
+ border: 0;
+}
diff --git a/templates/404.html b/templates/404.html
new file mode 100644
index 0000000..b931eeb
--- /dev/null
+++ b/templates/404.html
@@ -0,0 +1,5 @@
+{% extends "base.html" %}
+
+{% block content %}
+ <h2>Page not found</h2>
+{% endblock content %}
diff --git a/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..b41a37c
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <title>
+ {% if page.title %}
+ {{ page.title }}&nbsp;|&nbsp;
+ {% endif %}
+ {% if section.title %}
+ {{ section.title }}&nbsp;|&nbsp;
+ {% endif %}
+ {{ config.title }}
+ </title>
+
+ <link rel="stylesheet" type="text/css" media="screen" href={{ get_url(path="main.css") }} />
+ </head>
+
+ <body>
+ <header>
+ <h1 class="title">{{ config.title }}</h1>
+ <div class="navbar">
+ <ul>
+ {% set current_path = current_path | default(value="/") %}
+ <li>
+ {% if current_path == "/" %}
+ <a href="/" class="navbar-selected">About</a>
+ {% else %}
+ <a href="/" class="navbar-unselected">About</a>
+ {% endif %}
+ </li>
+ <li>
+ {% if current_path is starting_with("/blog") %}
+ <a href="/blog/" class="navbar-selected">Blog</a>
+ {% else %}
+ <a href="/blog/" class="navbar-unselected">Blog</a>
+ {% endif %}
+ </li>
+ <li>
+ {% if current_path is starting_with("/publications") %}
+ <a href="/publications/" class="navbar-selected">Publications</a>
+ {% else %}
+ <a href="/publications/" class="navbar-unselected">Publications</a>
+ {% endif %}
+ </li>
+ <li>
+ {% if current_path is starting_with("/software") %}
+ <a href="/software/" class="navbar-selected">Software</a>
+ {% else %}
+ <a href="/software/" class="navbar-unselected">Software</a>
+ {% endif %}
+ </li>
+ <li>
+ {% if current_path is starting_with("/teaching") %}
+ <a href="/teaching/" class="navbar-selected">Teaching</a>
+ {% else %}
+ <a href="/teaching/" class="navbar-unselected">Teaching</a>
+ {% endif %}
+ </li>
+ </ul>
+ </div>
+ </header>
+
+ <main>
+ {% block content %}
+ {% endblock content %}
+ </main>
+
+ <footer>
+ <p>
+ Copyright (c) 2022 A.D.B. Jesus.
+ </p>
+ <p>
+ The contents of this website are licensed under the
+ <a rel="license"
+ href="https://creativecommons.org/licenses/by-sa/4.0">CC
+ BY-SA 4.0</a> license, except for the PDFs in the
+ <a href="/publications/">publications page</a> or if
+ otherwise explicitly noted.
+ </p>
+ <p>
+ The source code of this website is licensed under the MIT
+ license, and available in a
+ <a href="https://git.adbjesus.com/website">git repository</a>.
+ </p>
+ </footer>
+ </body>
+</html>
diff --git a/templates/blog.html b/templates/blog.html
new file mode 100644
index 0000000..147ac2b
--- /dev/null
+++ b/templates/blog.html
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+
+{% block content %}
+ <h2>{{ section.title }}</h2>
+ <div class="content">
+ <p><a href="atom.xml">Feed</a></p>
+ {% for page in section.pages %}
+ <p>
+ {{ page.date }} <a href="{{ page.path }}" class>{{ page.title }}</a>
+ </p>
+ {% endfor %}
+ </div>
+{% endblock content %}
diff --git a/templates/index.html b/templates/index.html
new file mode 100644
index 0000000..effabc5
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1,8 @@
+{% extends "base.html" %}
+
+{% block content %}
+ <h2>{{ section.title }}</h2>
+ <div class="content">
+ {{ section.content | safe }}
+ </div>
+{% endblock content %}
diff --git a/templates/page.html b/templates/page.html
new file mode 100644
index 0000000..f3a86d8
--- /dev/null
+++ b/templates/page.html
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block content %}
+ <h2>{{ page.title }}</h2>
+ <div class="content">
+ {% if page.date %}
+ <span>{{ page.date }}</span>
+ {% endif %}
+ {{ page.content | safe }}
+ </div>
+{% endblock content %}