diff options
author | Alexandre Jesus <adbjesus@gmail.com> | 2022-08-26 13:10:42 +0100 |
---|---|---|
committer | Alexandre Jesus <adbjesus@gmail.com> | 2022-08-29 18:31:02 +0100 |
commit | dbfe642280c043e129752c488aa8c14159071281 (patch) | |
tree | 8f579fce8c326630ec1db05d330b3458d48b8bdc | |
download | adbjesus.com-dbfe642280c043e129752c488aa8c14159071281.tar.gz adbjesus.com-dbfe642280c043e129752c488aa8c14159071281.zip |
Initial site, and first blog post
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 Binary files differnew file mode 100644 index 0000000..8a3a888 --- /dev/null +++ b/content/publications/dias2021nondlib.pdf 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, “A model of + anytime algorithm performance for bi-objective optimization”, + _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. “Finding + representations for an unconstrained bi-objective combinatorial + optimization problem”, _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, “On + the design and anytime performance of indicator-based branch and + bound for multi-objective combinatorial optimization”, 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, + “Algorithm Selection of Anytime Algorithms”, 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, + “Techniques to analyze the anytime behavior of algorithms for + multi-objective optimization”, in _31st European Conference on + Operational Research (EURO 2021)_, July 2021. + [PDF](jesus2021techniques.pdf) +- D. M. Dias, **A. D. Jesus**, and L. Paquete, “A software + library for archiving nondominated points”, 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. “A model of anytime + algorithm performance for biobjective optimization problems”, + 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**, “Implicit Enumeration for Representation + Systems in Multi-objective Optimization”, 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 Binary files differnew file mode 100644 index 0000000..36b9309 --- /dev/null +++ b/content/publications/jesus2015implicit.pdf diff --git a/content/publications/jesus2018finding.pdf b/content/publications/jesus2018finding.pdf Binary files differnew file mode 100644 index 0000000..4474004 --- /dev/null +++ b/content/publications/jesus2018finding.pdf diff --git a/content/publications/jesus2019model.pdf b/content/publications/jesus2019model.pdf Binary files differnew file mode 100644 index 0000000..35bcccc --- /dev/null +++ b/content/publications/jesus2019model.pdf diff --git a/content/publications/jesus2020algorithm.pdf b/content/publications/jesus2020algorithm.pdf Binary files differnew file mode 100644 index 0000000..baa70bd --- /dev/null +++ b/content/publications/jesus2020algorithm.pdf diff --git a/content/publications/jesus2020model.pdf b/content/publications/jesus2020model.pdf Binary files differnew file mode 100644 index 0000000..29bd249 --- /dev/null +++ b/content/publications/jesus2020model.pdf diff --git a/content/publications/jesus2021design.pdf b/content/publications/jesus2021design.pdf Binary files differnew file mode 100644 index 0000000..532b6ad --- /dev/null +++ b/content/publications/jesus2021design.pdf diff --git a/content/publications/jesus2021techniques.pdf b/content/publications/jesus2021techniques.pdf Binary files differnew file mode 100644 index 0000000..1575e10 --- /dev/null +++ b/content/publications/jesus2021techniques.pdf 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 }} | + {% endif %} + {% if section.title %} + {{ section.title }} | + {% 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 %} |