diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index c84e9d6..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -# Contributing to al-folio - -Thank you for considering contributing to al-folio! - -## Pull Requests - -We welcome your pull requests (PRs). -For minor fixes (e.g., documentation improvements), feel free to submit a PR directly. -If you would like to implement a new feature or a bug, please make sure you (or someone else) has opened an appropriate issue first; in your PR, please mention the issue it addresses. - -Note that since [#2048](https://github.com/alshedivat/al-folio/pull/2048) al-folio uses the [prettier formatter](https://prettier.io/) for its code, meaning all new submitted code must conform to its standard. If you don't have `prettier` installed for your setup and the `prettier` code check fails when submitting a PR, you can check the referred failed action in our repo. In that action there will be an artifact with an HTML diff showing the needed changes. - -## Issues - -We use GitHub issues to track bugs and feature requests. -Before submitting an issue, please make sure: - -1. You have read [the FAQ section](FAQ.md) of the README and your question is NOT addressed there. -2. You have done your best to ensure that your issue is NOT a duplicate of one of [the previous issues](https://github.com/alshedivat/al-folio/issues). -3. Your issue is either a bug (unexpected/undesirable behavior) or a feature request. - If it is just a question, please ask it in the [Discussions](https://github.com/alshedivat/al-folio/discussions) forum. - -When submitting an issue, please make sure to use the appropriate template. - -## License - -By contributing to al-folio, you agree that your contributions will be licensed -under the LICENSE file in the root directory of the source tree. diff --git a/CUSTOMIZE.md b/CUSTOMIZE.md deleted file mode 100644 index 80bffff..0000000 --- a/CUSTOMIZE.md +++ /dev/null @@ -1,154 +0,0 @@ -# Customize - -Here we will give you some tips on how to customize the website. One important thing to note is that **ALL** the changes you make should be done on the **main** branch of your repository. The `gh-pages` branch is automatically overwritten every time you make a change to the main branch. - -## Project structure - -The project is structured as follows, focusing on the main components that you will need to modify: - -```txt -. -├── 📂 assets/: contains the assets that are displayed in the website -│   └── 📂 json/ - │   └── 📄 resume.json: CV in JSON format (https://jsonresume.org/) -├── 📂 _bibliography/ -│   └── 📄 papers.bib: bibliography in BibTeX format -├── 📄 _config.yml: the configuration file of the template -├── 📂 _data/: contains some of the data used in the template -│   ├── 📄 cv.yml: CV in YAML format, used when assets/json/resume.json is not found -│   └── 📄 repositories.yml: users and repositories info in YAML format -├── 📂 _includes/: contains code parts that are included in the main HTML file -│   └── 📄 news.liquid: defines the news section layout in the about page -├── 📂 _layouts/: contains the layouts to choose from in the frontmatter of the Markdown files -├── 📂 _news/: the news that will appear in the news section in the about page -├── 📂 _pages/: contains the pages of the website -| └── 📄 404.md: 404 page (page not found) -├── 📂 _posts/: contains the blog posts -├── 📂 _projects/: contains the projects -└── 📂 _sass/: contains the SASS files that define the style of the website - ├── 📄 _base.scss: base style of the website - ├── 📄 _cv.scss: style of the CV page - ├── 📄 _distill.scss: style of the Distill articles - ├── 📄 _layout.scss: style of the overall layout - ├── 📄 _themes.scss: themes colors and a few icons - └── 📄 _variables.scss: variables used in the SASS files -``` - -## Configuration - -The configuration file [\_config.yml](_config.yml) contains the main configuration of the website. Most of the settings is self-explanatory and we also tried to add as much comments as possible. If you have any questions, please check if it was not already answered in the [FAQ](FAQ.md). - -> Note that the `url` and `baseurl` settings are used to generate the links of the website, as explained in the [install instructions](INSTALL.md). - -All changes made to this file are only visible after you rebuild the website. That means that you need to run `bundle exec jekyll serve` again if you are running the website locally or push your changes to GitHub if you are using GitHub Pages. All other changes are visible immediately, you only need to refresh the page. - -## Modifying the CV information - -There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [\_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option. - -What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml). If you want to use the [\_data/cv.yml](_data/cv.yml) file as the source of your CV, you must delete the [assets/json/resume.json](assets/json/resume.json) file. - -## Modifying the user and repository information - -The user and repository information is defined in [\_data/repositories.yml](_data/repositories.yml). You can add as many users and repositories as you want. Both informations are used in the `repositories` section. - -## Creating new pages - -You can create new pages by adding new Markdown files in the [\_pages](_pages/) directory. The easiest way to do this is to copy an existing page and modify it. You can choose the layout of the page by changing the [layout](https://jekyllrb.com/docs/layouts/) attribute in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file, and also the path to access it by changing the [permalink](https://jekyllrb.com/docs/permalinks/) attribute. You can also add new layouts in the [\_layouts](_layouts/) directory if you feel the need for it. - -## Creating new blog posts - -To create a new blog post, you can add a new Markdown file in the [\_posts](_posts/) directory. The [name of the file must follow](https://jekyllrb.com/docs/posts/#creating-posts) the format `YYYY-MM-DD-title.md`. The easiest way to do this is to copy an existing blog post and modify it. Note that some blog posts have optional fields in the [frontmatter](https://jekyllrb.com/docs/front-matter/) that are used to enable specific behaviors or functions. - -If you want to create blog posts that are not ready to be published, but you want to track it with git, you can create a [\_drafts](https://jekyllrb.com/docs/posts/#drafts) directory and store them there. - -## Creating new projects - -You can create new projects by adding new Markdown files in the [\_projects](_projects/) directory. The easiest way to do this is to copy an existing project and modify it. - -## Adding some news - -You can add news in the about page by adding new Markdown files in the [\_news](_news/) directory. There are currently two types of news: inline news and news with a link. News with a link take you to a new page while inline news are displayed directly in the about page. The easiest way to create yours is to copy an existing news and modify it. - -## Adding Collections - -This Jekyll theme implements `collections` to let you break up your work into categories. The theme comes with two default collections: `news` and `projects`. Items from the `news` collection are automatically displayed on the home page. Items from the `projects` collection are displayed on a responsive grid on projects page. - -You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to [\_pages/projects.md](_pages/projects.md). - -## Adding a new publication - -To add publications create a new entry in the [\_bibliography/papers.bib](_bibliography/papers.bib) file. You can find the BibTeX entry of a publication in Google Scholar by clicking on the quotation marks below the publication title, then clicking on "BibTeX", or also in the conference page itself. By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [\_config.yml](_config.yml) file. - -You can add extra information to a publication, like a PDF file in the `assets/pdfs/` directory and add the path to the PDF file in the BibTeX entry with the `pdf` field. Some of the supported fields are: `abstract`, `altmetric`, `annotation`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`. - -### Author annotation - -In publications, the author entry for yourself is identified by string array `scholar:last_name` and string array `scholar:first_name` in [\_config.yml](_config.yml). For example, if you have the following entry in your [\_config.yml](_config.yml): - -```yaml -scholar: - last_name: [Einstein] - first_name: [Albert, A.] -``` - -If the entry matches one form of the last names and the first names, it will be underlined. Keep meta-information about your co-authors in [\_data/coauthors.yml](_data/coauthors.yml) and Jekyll will insert links to their webpages automatically. The co-author data format is as follows, - -```yaml -"adams": - - firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"] - url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams - -"podolsky": - - firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"] - url: https://en.wikipedia.org/wiki/Boris_Podolsky - -"rosen": - - firstname: ["Nathan", "N."] - url: https://en.wikipedia.org/wiki/Nathan_Rosen - -"bach": - - firstname: ["Johann Sebastian", "J. S."] - url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach - - - firstname: ["Carl Philipp Emanuel", "C. P. E."] - url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach -``` - -If the entry matches one of the combinations of the last names and the first names, it will be highlighted and linked to the url provided. - -### Buttons (through custom bibtex keywords) - -There are several custom bibtex keywords that you can use to affect how the entries are displayed on the webpage: - -- `abbr`: Adds an abbreviation to the left of the entry. You can add links to these by creating a venue.yaml-file in the \_data folder and adding entries that match. -- `abstract`: Adds an "Abs" button that expands a hidden text field when clicked to show the abstract text -- `altmetric`: Adds an [Altmetric](https://www.altmetric.com/) badge (Note: if DOI is provided just use `true`, otherwise only add the altmetric identifier here - the link is generated automatically) -- `annotation`: Adds a popover info message to the end of the author list that can potentially be used to clarify superscripts. HTML is allowed. -- `arxiv`: Adds a link to the Arxiv website (Note: only add the arxiv identifier here - the link is generated automatically) -- `bibtex_show`: Adds a "Bib" button that expands a hidden text field with the full bibliography entry -- `blog`: Adds a "Blog" button redirecting to the specified link -- `code`: Adds a "Code" button redirecting to the specified link -- `dimensions`: Adds a [Dimensions](https://www.dimensions.ai/) badge (Note: if DOI or PMID is provided just use `true`, otherwise only add the Dimensions' identifier here - the link is generated automatically) -- `html`: Inserts an "HTML" button redirecting to the user-specified link -- `pdf`: Adds a "PDF" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) -- `poster`: Adds a "Poster" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) -- `slides`: Adds a "Slides" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) -- `supp`: Adds a "Supp" button to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) -- `website`: Adds a "Website" button redirecting to the specified link - -You can implement your own buttons by editing the [\_layouts/bib.liquid](_layouts/bib.liquid) file. - -## Changing theme color - -A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the [\_sass/\_themes.scss](_sass/_themes.scss) file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template. - -## Adding social media information - -You can add your social media links by adding the specified information at the `Social integration` section in the [\_config.yml](_config.yml) file. This information will appear at the bottom of the `About` page. - -## Adding a newsletter - -You can add a newsletter subscription form by adding the specified information at the `newsletter` section in the [\_config.yml](_config.yml) file. To set up a newsletter, you can use a service like [Loops.so](https://loops.so/), which is the current supported solution. Once you have set up your newsletter, you can add the form [endpoint](https://loops.so/docs/forms/custom-form) to the `endpoint` field in the `newsletter` section of the [\_config.yml](_config.yml) file. - -Depending on your specified footer behavior, the sign up form either will appear at the bottom of the `About` page and at the bottom of blogposts if `related_posts` are enabled, or in the footer at the bottom of each page. diff --git a/FAQ.md b/FAQ.md deleted file mode 100644 index d6faca5..0000000 --- a/FAQ.md +++ /dev/null @@ -1,101 +0,0 @@ -# Frequently Asked Questions - -Here are some frequently asked questions. If you have a different question, please check if it was not already answered in the Q&A section of the [GitHub Discussions](https://github.com/alshedivat/al-folio/discussions/categories/q-a). If not, feel free to ask a new question there. - -- [After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically?](#after-i-create-a-new-repository-from-this-template-and-setup-the-repo-i-get-a-deployment-error-isnt-the-website-supposed-to-correctly-deploy-automatically) -- [I am using a custom domain (e.g., `foo.com`). My custom domain becomes blank in the repository settings after each deployment. How do I fix that?](#i-am-using-a-custom-domain-eg-foocom-my-custom-domain-becomes-blank-in-the-repository-settings-after-each-deployment-how-do-i-fix-that) -- [My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-fails-to-build-and-throws-unknown-tag-toc-how-do-i-fix-that) -- [My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-are-not-loaded-properly-how-do-i-fix-that) -- [Atom feed doesn't work. Why?](#atom-feed-doesnt-work-why) -- [My site doesn't work when I enable `related_blog_posts`. Why?](#my-site-doesnt-work-when-i-enable-related_blog_posts-why) -- [When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix?](#when-trying-to-deploy-its-asking-for-github-login-credentials-which-github-disabled-password-authentication-and-it-exits-with-an-error-how-to-fix) -- [When I manually run the Lighthouse Badger workflow, it fails with `Error: Input required and not supplied: token`. How do I fix that?](#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that) -- [My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for master branch`. How do I fix that?](#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-master-branch-how-do-i-fix-that) -- [After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened?](#after-i-update-my-site-with-some-new-content-even-a-small-change-the-github-action-throws-an-error-or-displays-a-warning-what-happened) -- [I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that?](#i-am-trying-to-deploy-my-site-but-it-fails-with-could-not-find-gem-jekyll-diagrams-in-locally-installed-gems-how-do-i-fix-that) -- [How can I update Font Awesome version on the template](#how-can-i-update-font-awesome-version-on-the-template) -- [What do all these GitHub actions/workflows mean?](#what-do-all-these-github-actionsworkflows-mean) - ---- - -#### After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically? - -Yes, if you are using release `v0.3.5` or later, the website will automatically and correctly re-deploy right after your first commit. Please make some changes (e.g., change your website info in `_config.yml`), commit, and push. Make sure to follow [deployment instructions](https://github.com/alshedivat/al-folio#deployment). (Relevant issue: [209](https://github.com/alshedivat/al-folio/issues/209#issuecomment-798849211).) - -#### I am using a custom domain (e.g., `foo.com`). My custom domain becomes blank in the repository settings after each deployment. How do I fix that? - -You need to add `CNAME` file to the `master` or `source` branch of your repository. The file should contain your custom domain name. (Relevant issue: [130](https://github.com/alshedivat/al-folio/issues/130).) - -#### My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that? - -Make sure you followed through the [deployment instructions](#deployment) in the previous section. You should have set the deployment branch to `gh-pages`. (Related issue: [1438](https://github.com/alshedivat/al-folio/issues/1438).) - -#### My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that? - -If the website does not load the theme, the layout looks weird, and all links are broken, make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. Set `url` to `https://.github.io` or to `https://` if you are using a custom domain. If you are deploying a personal or organization website, leave `baseurl` blank. If you are deploying a project page, set `baseurl: //`. If all previous steps were done correctly, all is missing is [for your browser to fetch again the site stylesheet](https://github.com/alshedivat/al-folio/issues/1398#issuecomment-1609518404). - -#### Atom feed doesn't work. Why? - -Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. RSS Feed plugin works with these correctly set up fields: `title`, `url`, `description` and `author`. Make sure to fill them in an appropriate way and try again. - -#### My site doesn't work when I enable `related_blog_posts`. Why? - -This is probably due to the [classifier reborn](https://github.com/jekyll/classifier-reborn) plugin, which is used to calculate related posts. If the error states `Liquid Exception: Zero vectors can not be normalized...` or `sqrt': Numerical argument is out of domain - "sqrt"`, it means that it could not calculate related posts for a specific post. This is usually caused by [empty or minimal blog posts](https://github.com/jekyll/classifier-reborn/issues/64) without meaningful words (i.e. only [stop words](https://en.wikipedia.org/wiki/Stop_words)) or even [specific characters](https://github.com/jekyll/classifier-reborn/issues/194) you used in your posts. Also, the calculus for similar posts are made for every `post`, which means every page that uses `layout: post`, including the announcements. To change this behavior, simply add `related_posts: false` to the front matter of the page you don't want to display related posts on. Another solution is to disable the lsi (latent semantic indexing) entirely by setting the `lsi` flag to `false` in `_config.yml`. Related issue: [#1828](https://github.com/alshedivat/al-folio/issues/1828). - -#### When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix? - -Open .git/config file using your preferred editor. Change the `https` portion of the `url` variable to `ssh`. Try deploying again. - -#### When I manually run the [Lighthouse Badger](https://github.com/alshedivat/al-folio/actions/workflows/lighthouse-badger.yml) workflow, it fails with `Error: Input required and not supplied: token`. How do I fix that? - -You need to [create a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) and [add it as a secret](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-encrypted-secrets-for-a-repository) named `LIGHTHOUSE_BADGER_TOKEN` to your repository. For more information, check [lighthouse-badger documentation](https://github.com/MyActionWay/lighthouse-badger-workflows#lighthouse-badger-easyyml) on how to do this. - -#### My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for master branch`. How do I fix that? - -We implemented support for [Prettier code formatting](https://prettier.io/) in [#2048](https://github.com/alshedivat/al-folio/pull/2048). It basically ensures that your code is well formatted. If you want to ensure your code is compliant with `Prettier` you can install it in your computer [integrated with an editor](https://prettier.io/docs/en/editors), [install it and run manually](https://prettier.io/docs/en/install), or you can disable it for your repo. For this, just delete the file [.github/workflows/prettier.yml](https://github.com/alshedivat/al-folio/blob/master/.github/workflows/prettier.yml). - -#### After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened? - -Probably your GitHub workflow is throwing an error like this: - -```bash -/opt/hostedtoolcache/Ruby/3.0.2/x64/lib/ruby/gems/3.0.0/gems/bundler-2.5.5/lib/bundler/runtime.rb:304:in `check_for_activated_spec!': You have already activated uri 0.10.1, but your Gemfile requires uri 0.13.0. Since uri is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports uri as a default gem. (Gem::LoadError) -``` - -or maybe displaying a warning like one of these: - -``` -Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. -Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v2, actions/cache@v2. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. -The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2, actions/cache@v2. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/ -The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ -``` - -If that's the case, you are using deprecated libraries/commands. This happens because you are using a very old version of al-folio. To fix this it is recommended [upgrading your code to the latest version](INSTALL.md#upgrading-from-a-previous-version) of the template. You will probably need to do some manual merging. If you find it easier, you could create a copy of your repository, do a fresh installation from the template and reapply all your changes. For this I would recommend a tool like [meld](https://meldmerge.org/) or [winmerge](https://winmerge.org/) to check the differences between directories/files. - -Note that libraries tend to be deprecated and support for them dropped as they are no longer maintained, and keep using them involves security breaches. Also, some of these deprecations are enforced, for example, by GitHub itself, so there's so much we can do. We have also added tons of new functionality, as well as tidying things up and improving the overall speed and structure, so you could also benefit from these improvements. - -#### I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that? - -`jekyll-diagrams` support was dropped in [#1992](https://github.com/alshedivat/al-folio/pull/1992) in favor of using `mermaid.js` directly. Simply [update your code](INSTALL.md#upgrading-from-a-previous-version) to get the latest changes. - -#### How can I update Font Awesome version on the template - -To update the Font Awesome version, you need to download the latest release "for the web" from the [Font Awesome website](https://fontawesome.com/download). After downloading, extract the zip file and copy the `scss/` directory content to `_sass/font-awesome/` and the `webfonts/` content to `assets/webfonts/`. - -#### What do all these GitHub actions/workflows mean? - -GitHub actions are a way to automate tasks in the repository. They are defined in `.github/workflows/` directory. Each file in this directory is a workflow. Workflows are made up of one or more jobs, and each job runs on a virtual machine hosted by GitHub. You can see the status of the workflows in the `Actions` tab of your repository. For more information, check the [GitHub Actions documentation](https://docs.github.com/en/actions). - -Currently we have the following workflows: - -- `axe.yml`: does some accessibility testing in your site. It uses the [axe cli](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli) tool with a chrome driver to render the webpage and allow the analysis. Must be run manually, since fixing some of the issues is not straightforward -- `broken-links-site.yml`: checks for broken links in your built website with the [lychee-action](https://github.com/lycheeverse/lychee-action) -- `broken-links.yml`: checks for broken links in your repository with the [lychee-action](https://github.com/lycheeverse/lychee-action) -- `deploy-docker-tag.yml`: adds some metadata to the docker image and pushes it to Docker Hub -- `deploy-image.yml`: deploys a new docker image with the latest changes to Docker Hub -- `deploy.yml`: deploys the website to GitHub Pages -- `docker-slim.yml`: deploys a smaller version of the docker image to Docker Hub with the [docker-slim-action](https://github.com/kitabisa/docker-slim-action) -- `lighthouse-badger.yml`: runs a [lighthouse](https://github.com/GoogleChrome/lighthouse) test for your site with the [lighthouse-badger-action](https://github.com/MyActionWay/lighthouse-badger-action), saving the results in the repository for easy inspecting, as can be seen [here](https://github.com/alshedivat/al-folio?tab=readme-ov-file#lighthouse-pagespeed-insights). For more information on how to enable this workflow, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/master/FAQ.md#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that) -- `prettier-comment-on-pr.yml`: not working. For now, this action is disabled. It was supposed to run prettier on the PRs and comment on them with the changes needed. For more information, check [issue 2115](https://github.com/alshedivat/al-folio/issues/2115) -- `prettier.yml`: runs [prettier](https://prettier.io/) on the code to ensure it is well formatted. For more information, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/master/FAQ.md#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-master-branch-how-do-i-fix-that) diff --git a/Gemfile.lock b/Gemfile.lock index 33a53ae..1bc602d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,8 +11,8 @@ GEM minitest (>= 5.1) mutex_m tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) base64 (0.2.0) bibtex-ruby (6.1.0) latex-decode (~> 0.0) @@ -27,7 +27,7 @@ GEM fast-stemmer (~> 1.0) matrix (~> 0.4) colorator (1.1.0) - concurrent-ruby (1.2.3) + concurrent-ruby (1.3.3) connection_pool (2.4.1) crass (1.0.6) csl (1.6.0) @@ -50,12 +50,15 @@ GEM feedjira (3.2.3) loofah (>= 2.3.1, < 3) sax-machine (>= 1.0, < 2) - ffi (1.16.3) + ffi (1.17.0-aarch64-linux-gnu) + ffi (1.17.0-arm64-darwin) forwardable-extended (2.6.0) gemoji (4.1.0) - google-protobuf (4.26.1-aarch64-linux) + google-protobuf (4.27.2-aarch64-linux) + bigdecimal rake (>= 13) - google-protobuf (4.26.1-x86_64-linux) + google-protobuf (4.27.2-arm64-darwin) + bigdecimal rake (>= 13) html-pipeline (2.14.3) activesupport (>= 2) @@ -136,7 +139,7 @@ GEM kramdown (~> 2.0) latex-decode (0.4.0) libv8-node (21.7.2.0-aarch64-linux) - libv8-node (21.7.2.0-x86_64-linux) + libv8-node (21.7.2.0-arm64-darwin) liquid (4.0.4) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) @@ -157,26 +160,24 @@ GEM racc (~> 1.7) nokogiri (1.16.5-aarch64-linux) racc (~> 1.4) - nokogiri (1.16.5-x86_64-linux) + nokogiri (1.16.5-arm64-darwin) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (5.0.5) + public_suffix (6.0.0) racc (1.7.3) rake (13.2.1) rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) rexml (3.2.8) - strscan (>= 3.0.9) - rouge (4.2.1) + rouge (4.3.0) safe_yaml (1.0.5) - sass-embedded (1.77.0-aarch64-linux-gnu) + sass-embedded (1.77.5-aarch64-linux-gnu) google-protobuf (>= 3.25, < 5.0) - sass-embedded (1.77.0-x86_64-linux-gnu) + sass-embedded (1.77.5-arm64-darwin) google-protobuf (>= 3.25, < 5.0) sax-machine (1.3.2) - strscan (3.1.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) tzinfo (2.0.6) @@ -188,8 +189,8 @@ GEM webrick (1.8.1) PLATFORMS - aarch64-linux - x86_64-linux-gnu + aarch64-linux-gnu + arm64-darwin-23 DEPENDENCIES classifier-reborn @@ -218,4 +219,4 @@ DEPENDENCIES webrick BUNDLED WITH - 2.5.7 + 2.5.14 diff --git a/README.md b/README.md index 9d50fe6..156b94e 100644 --- a/README.md +++ b/README.md @@ -1,463 +1 @@ -# al-folio - -
- -[![Preview](readme_preview/al-folio-preview.png)](https://alshedivat.github.io/al-folio/) - -**A simple, clean, and responsive [Jekyll](https://jekyllrb.com/) theme for academics.** - ---- - -[![deploy](https://github.com/alshedivat/al-folio/actions/workflows/deploy.yml/badge.svg)](https://github.com/alshedivat/al-folio/actions/workflows/deploy.yml) -[![Maintainers](https://img.shields.io/badge/maintainers-4-success.svg)](#maintainers) -[![GitHub contributors](https://img.shields.io/github/contributors/alshedivat/al-folio.svg)](https://github.com/alshedivat/al-folio/graphs/contributors/) -[![Docker Image Version](https://img.shields.io/docker/v/amirpourmand/al-folio?sort=semver&label=docker%20image&color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio) -[![Docker Image Size](https://img.shields.io/docker/image-size/amirpourmand/al-folio?sort=date&label=docker%20image%20size&color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio) -[![Docker Pulls](https://img.shields.io/docker/pulls/amirpourmand/al-folio?color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio) - -[![GitHub release](https://img.shields.io/github/v/release/alshedivat/al-folio)](https://github.com/alshedivat/al-folio/releases/latest) -[![GitHub license](https://img.shields.io/github/license/alshedivat/al-folio?color=blue)](https://github.com/alshedivat/al-folio/blob/master/LICENSE) -[![GitHub stars](https://img.shields.io/github/stars/alshedivat/al-folio)](https://github.com/alshedivat/al-folio) -[![GitHub forks](https://img.shields.io/github/forks/alshedivat/al-folio)](https://github.com/alshedivat/al-folio/fork) - -
- -## User community - -The vibrant community of **al-folio** users is growing! -Academics around the world use this theme for their homepages, blogs, lab pages, as well as webpages for courses, workshops, conferences, meetups, and more. -Check out the community webpages below. -Feel free to add your own page(s) by sending a PR. - - - - - - - - - - - - - - - - - - -
Academics - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Labs - - - - - - - - - -
Courses -CMU PGM (S-19)
-CMU DeepRL (S-21, F-21, S-22, F-22, S-23, F-23)
-CMU MMML (F-20, F-22)
-CMU AMMML (S-22, S-23)
-CMU ASI (S-23)
-CMU Distributed Systems (S-24) -
Conferences & workshops -ICLR Blog Post Track (2023, 2024)
-ML Retrospectives (NeurIPS: 2019, 2020; ICML: 2020)
-HAMLETS (NeurIPS: 2020)
-ICBINB (NeurIPS: 2020, 2021)
-Neural Compression (ICLR: 2021)
-Score Based Methods (NeurIPS: 2022)
-Images2Symbols (CogSci: 2022)
-Medical Robotics Junior Faculty Forum (ISMR: 2023)
-Beyond Vision: Physics meets AI (ICIAP: 2023)
-Workshop on Diffusion Models (NeurIPS: 2023) -
- -## Lighthouse PageSpeed Insights - -### Desktop - -[![Google Lighthouse PageSpeed Insights](lighthouse_results/desktop/pagespeed.svg)](https://htmlpreview.github.io/?https://github.com/alshedivat/al-folio/blob/master/lighthouse_results/desktop/alshedivat_github_io_al_folio_.html) - -Run the test yourself: [Google Lighthouse PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=desktop) - -### Mobile - -[![Google Lighthouse PageSpeed Insights](lighthouse_results/mobile/pagespeed.svg)](https://htmlpreview.github.io/?https://github.com/alshedivat/al-folio/blob/master/lighthouse_results/mobile/alshedivat_github_io_al_folio_.html) - -Run the test yourself: [Google Lighthouse PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=mobile) - -## Table Of Contents - -- [al-folio](#al-folio) - - [User community](#user-community) - - [Lighthouse PageSpeed Insights](#lighthouse-pagespeed-insights) - - [Desktop](#desktop) - - [Mobile](#mobile) - - [Table Of Contents](#table-of-contents) - - [Getting started](#getting-started) - - [Installing and Deploying](#installing-and-deploying) - - [Customizing](#customizing) - - [Features](#features) - - [Light/Dark Mode](#lightdark-mode) - - [CV](#cv) - - [People](#people) - - [Publications](#publications) - - [Collections](#collections) - - [Layouts](#layouts) - - [The iconic style of Distill](#the-iconic-style-of-distill) - - [Full support for math \& code](#full-support-for-math--code) - - [Photos, Audio, Video and more](#photos-audio-video-and-more) - - [Other features](#other-features) - - [GitHub's repositories and user stats](#githubs-repositories-and-user-stats) - - [Theming](#theming) - - [Social media previews](#social-media-previews) - - [Atom (RSS-like) Feed](#atom-rss-like-feed) - - [Related posts](#related-posts) - - [Code quality checks](#code-quality-checks) - - [FAQ](#faq) - - [Contributing](#contributing) - - [Maintainers](#maintainers) - - [All Contributors](#all-contributors) - - [Star History](#star-history) - - [License](#license) - -## Getting started - -Want to learn more about Jekyll? Check out [this tutorial](https://www.taniarascia.com/make-a-static-website-with-jekyll/). Why Jekyll? Read [Andrej Karpathy's blog post](https://karpathy.github.io/2014/07/01/switching-to-jekyll/)! Why write a blog? Read [Rachel Thomas blog post](https://medium.com/@racheltho/why-you-yes-you-should-blog-7d2544ac1045). - -## Installing and Deploying - -For installation and deployment details please refer to [INSTALL.md](INSTALL.md). - -## Customizing - -For customization details please refer to [CUSTOMIZE.md](CUSTOMIZE.md). - -## Features - -### Light/Dark Mode - -This template has a built-in light/dark mode. It detects the user preferred color scheme and automatically switches to it. You can also manually switch between light and dark mode by clicking on the sun/moon icon in the top right corner of the page. - -

- - -

- ---- - -### CV - -There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [\_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option. - -What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml) as fallback. - -[![CV Preview](readme_preview/cv.png)](https://alshedivat.github.io/al-folio/cv/) - ---- - -### People - -You can create a people page if you want to feature more than one person. Each person can have its own short bio, profile picture, and you can also set if every person will appear at the same or opposite sides. - -[![People Preview](readme_preview/people.png)](https://alshedivat.github.io/al-folio/people/) - ---- - -### Publications - -Your publications' page is generated automatically from your BibTex bibliography. Simply edit [\_bibliography/papers.bib](_bibliography/papers.bib). You can also add new `*.bib` files and customize the look of your publications however you like by editing [\_pages/publications.md](_pages/publications.md). By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [\_config.yml](_config.yml) file. - -You can add extra information to a publication, like a PDF file in the [assets/pdf/](assets/pdf/) directory and add the path to the PDF file in the BibTeX entry with the `pdf` field. Some of the supported fields are: `abstract`, `altmetric`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`. - -[![Publications Preview](readme_preview/publications.png)](https://alshedivat.github.io/al-folio/publications/) - ---- - -### Collections - -This Jekyll theme implements `collections` to let you break up your work into categories. The theme comes with two default collections: `news` and `projects`. Items from the `news` collection are automatically displayed on the home page. Items from the `projects` collection are displayed on a responsive grid on projects page. - -[![Projects Preview](readme_preview/projects.png)](https://alshedivat.github.io/al-folio/projects/) - -You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to `_pages/projects.md`. - ---- - -### Layouts - -**al-folio** comes with stylish layouts for pages and blog posts. - -#### The iconic style of Distill - -The theme allows you to create blog posts in the [distill.pub](https://distill.pub/) style: - -[![Distill Preview](readme_preview/distill.png)](https://alshedivat.github.io/al-folio/blog/2021/distill/) - -For more details on how to create distill-styled posts using `` tags, please refer to [the example](https://alshedivat.github.io/al-folio/blog/2021/distill/). - -#### Full support for math & code - -**al-folio** supports fast math typesetting through [MathJax](https://www.mathjax.org/) and code syntax highlighting using [GitHub style](https://github.com/jwarby/jekyll-pygments-themes). Also supports [chartjs charts](https://www.chartjs.org/), [mermaid diagrams](https://mermaid-js.github.io/mermaid/#/), and [TikZ figures](https://tikzjax.com/). - -

- - -

- -#### Photos, Audio, Video and more - -Photo formatting is made simple using [Bootstrap's grid system](https://getbootstrap.com/docs/4.4/layout/grid/). Easily create beautiful grids within your blog posts and project pages, also with support for [video](https://alshedivat.github.io/al-folio/blog/2023/videos/) and [audio](https://alshedivat.github.io/al-folio/blog/2023/audios/) embeds: - -

- - - -

- ---- - -### Other features - -#### GitHub's repositories and user stats - -**al-folio** uses [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) and [github-profile-trophy](https://github.com/ryo-ma/github-profile-trophy) to display GitHub repositories and user stats on the `/repositories/` page. - -[![Repositories Preview](readme_preview/repositories.png)](https://alshedivat.github.io/al-folio/repositories/) - -Edit the `_data/repositories.yml` and change the `github_users` and `github_repos` lists to include your own GitHub profile and repositories to the `/repositories/` page. - -You may also use the following codes for displaying this in any other pages. - -```html - -{% if site.data.repositories.github_users %} -
- {% for user in site.data.repositories.github_users %} {% include repository/repo_user.liquid username=user %} {% endfor %} -
-{% endif %} - - -{% if site.repo_trophies.enabled %} {% for user in site.data.repositories.github_users %} {% if site.data.repositories.github_users.size > 1 %} -

{{ user }}

-{% endif %} -
- {% include repository/repo_trophies.liquid username=user %} -
-{% endfor %} {% endif %} - - -{% if site.data.repositories.github_repos %} -
- {% for repo in site.data.repositories.github_repos %} {% include repository/repo.liquid repository=repo %} {% endfor %} -
-{% endif %} -``` - ---- - -#### Theming - -A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the `_sass/_themes.scss` file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template. - ---- - -#### Social media previews - -**al-folio** supports preview images on social media. To enable this functionality you will need to set `serve_og_meta` to `true` in your [\_config.yml](_config.yml). Once you have done so, all your site's pages will include Open Graph data in the HTML head element. - -You will then need to configure what image to display in your site's social media previews. This can be configured on a per-page basis, by setting the `og_image` page variable. If for an individual page this variable is not set, then the theme will fall back to a site-wide `og_image` variable, configurable in your [\_config.yml](_config.yml). In both the page-specific and site-wide cases, the `og_image` variable needs to hold the URL for the image you wish to display in social media previews. - ---- - -#### Atom (RSS-like) Feed - -It generates an Atom (RSS-like) feed of your posts, useful for Atom and RSS readers. The feed is reachable simply by typing after your homepage `/feed.xml`. E.g. assuming your website mountpoint is the main folder, you can type `yourusername.github.io/feed.xml` - ---- - -#### Related posts - -By default, there will be a related posts section on the bottom of the blog posts. These are generated by selecting the `max_related` most recent posts that share at least `min_common_tags` tags with the current post. If you do not want to display related posts on a specific post, simply add `related_posts: false` to the front matter of the post. If you want to disable it for all posts, simply set `enabled` to false in the `related_blog_posts` section in [\_config.yml](_config.yml). - ---- - -#### Code quality checks - -Currently, we run some checks to ensure that the code quality and generated site are good. The checks are done using GitHub Actions and the following tools: - -- [Prettier](https://prettier.io/) - check if the formatting of the code follows the style guide -- [lychee](https://lychee.cli.rs/) - check for broken links -- [Axe](https://github.com/dequelabs/axe-core) (need to run manually) - do some accessibility testing - -We decided to keep `Axe` runs manual because fixing the issues are not straightforward and might be hard for people without web development knowledge. - -## FAQ - -For frequently asked questions, please refer to [FAQ.md](FAQ.md). - -## Contributing - -Contributions to al-folio are very welcome! Before you get started, please take a look at [the guidelines](CONTRIBUTING.md). - -If you would like to improve documentation or fix a minor inconsistency or bug, please feel free to send a PR directly to `master`. For more complex issues/bugs or feature requests, please open an issue using the appropriate template. - -### Maintainers - -Our most active contributors are welcome to join the maintainers team. If you are interested, please reach out! - - - - - - - - - - - - - -

Maruan

Rohan Deb Sarkar

Amir Pourmand

George
- - - - - - -### All Contributors - - - - - -## Star History - - - - - - Star History Chart - - - -## License - -The theme is available as open source under the terms of the [MIT License](https://github.com/alshedivat/al-folio/blob/master/LICENSE). - -Originally, **al-folio** was based on the [\*folio theme](https://github.com/bogoli/-folio) (published by [Lia Bogoev](https://liabogoev.com) and under the MIT license). Since then, it got a full re-write of the styles and many additional cool features. +# This is My Pattern diff --git a/_bibliography/papers.bib b/_bibliography/papers.bib deleted file mode 100644 index bf532eb..0000000 --- a/_bibliography/papers.bib +++ /dev/null @@ -1,114 +0,0 @@ ---- ---- - -@string{aps = {American Physical Society,}} - -@book{einstein1920relativity, - title={Relativity: the Special and General Theory}, - author={Einstein, Albert}, - year={1920}, - publisher={Methuen & Co Ltd}, - html={relativity.html} -} - -@book{einstein1956investigations, - bibtex_show={true}, - title={Investigations on the Theory of the Brownian Movement}, - author={Einstein, Albert}, - year={1956}, - publisher={Courier Corporation}, - preview={brownian-motion.gif} -} - -@article{einstein1950meaning, - abbr={AJP}, - bibtex_show={true}, - title={The meaning of relativity}, - author={Einstein, Albert and Taub, AH}, - journal={American Journal of Physics}, - volume={18}, - number={6}, - pages={403--404}, - year={1950}, - publisher={American Association of Physics Teachers} -} - -@article{PhysRev.47.777, - abbr={PhysRev}, - title={Can Quantum-Mechanical Description of Physical Reality Be Considered Complete?}, - author={Einstein*†, A. and Podolsky*, B. and Rosen*, N.}, - abstract={In a complete theory there is an element corresponding to each element of reality. A sufficient condition for the reality of a physical quantity is the possibility of predicting it with certainty, without disturbing the system. In quantum mechanics in the case of two physical quantities described by non-commuting operators, the knowledge of one precludes the knowledge of the other. Then either (1) the description of reality given by the wave function in quantum mechanics is not complete or (2) these two quantities cannot have simultaneous reality. Consideration of the problem of making predictions concerning a system on the basis of measurements made on another system that had previously interacted with it leads to the result that if (1) is false then (2) is also false. One is thus led to conclude that the description of reality as given by a wave function is not complete.}, - journal={Phys. Rev.}, - location={New Jersey}, - volume={47}, - issue={10}, - pages={777--780}, - numpages={0}, - year={1935}, - month={May}, - publisher=aps, - doi={10.1103/PhysRev.47.777}, - url={http://link.aps.org/doi/10.1103/PhysRev.47.777}, - html={https://journals.aps.org/pr/abstract/10.1103/PhysRev.47.777}, - pdf={example_pdf.pdf}, - altmetric={248277}, - dimensions={true}, - google_scholar_id={qyhmnyLat1gC}, - video={https://www.youtube-nocookie.com/embed/aqz-KE-bpKQ}, - additional_info={. *More Information* can be [found here](https://github.com/alshedivat/al-folio/)}, - annotation={* Example use of superscripts
† Albert Einstein}, - selected={true} -} - -@article{einstein1905molekularkinetischen, - title={{\"U}ber die von der molekularkinetischen Theorie der W{\"a}rme geforderte Bewegung von in ruhenden Fl{\"u}ssigkeiten suspendierten Teilchen}, - author={Einstein, A.}, - journal={Annalen der physik}, - volume={322}, - number={8}, - pages={549--560}, - year={1905}, - publisher={Wiley Online Library} -} - -@article{einstein1905movement, - abbr={Ann. Phys.}, - title={Un the movement of small particles suspended in statiunary liquids required by the molecular-kinetic theory 0f heat}, - author={Einstein, A.}, - journal={Ann. Phys.}, - volume={17}, - pages={549--560}, - year={1905} -} - -@article{einstein1905electrodynamics, - title={On the electrodynamics of moving bodies}, - author={Einstein, A.}, - year={1905} -} - -@Article{einstein1905photoelectriceffect, - bibtex_show={true}, - abbr={Ann. Phys.}, - title="{{\"U}ber einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt}", - author={Albert Einstein}, - abstract={This is the abstract text.}, - journal={Ann. Phys.}, - volume={322}, - number={6}, - pages={132--148}, - year={1905}, - doi={10.1002/andp.19053220607}, - award={Albert Einstein receveid the **Nobel Prize in Physics** 1921 *for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect*}, - award_name={Nobel Prize} -} - -@book{przibram1967letters, - bibtex_show={true}, - title={Letters on wave mechanics}, - author={Einstein, Albert and Schrödinger, Erwin and Planck, Max and Lorentz, Hendrik Antoon and Przibram, Karl}, - year={1967}, - publisher={Vision}, - preview={wave-mechanics.gif}, - abbr={Vision} -} diff --git a/_config.yml b/_config.yml index 1d1cb6d..1702895 100644 --- a/_config.yml +++ b/_config.yml @@ -2,18 +2,17 @@ # Site settings # ----------------------------------------------------------------------------- -title: blank # the website title (if blank, full name will be used instead) -first_name: You -middle_name: R. -last_name: Name -email: you@example.com -description: > # the ">" symbol means to ignore newlines until "footer_text:" - A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design. +title: This is My Pattern # the website title (if blank, full name will be used instead) +first_name: Fethi +middle_name: +last_name: Ozdol +email_url: https://veilmail.io/fethi +description: > + Hi, I'm Fethi. I'm an AWS solutions architect, and This is My Pattern. footer_text: > Powered by Jekyll with al-folio theme. Hosted by GitHub Pages. - Photos from Unsplash. -keywords: jekyll, jekyll-theme, academic-website, portfolio-website # add your own keywords or leave empty +keywords: aws, xecuta, rpa, rpa-farm, terraform # add your own keywords or leave empty lang: en # the language of your site (for example: en, fr, cn, ru, etc.) icon: ⚛️ # the emoji used as the favicon (alternatively, provide image name in /assets/img/) @@ -31,7 +30,7 @@ back_to_top: true # set to false to disable the back to top button repo_theme_light: default # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md repo_theme_dark: dark # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md repo_trophies: - enabled: true + enabled: false theme_light: flat # https://github.com/ryo-ma/github-profile-trophy theme_dark: gitdimmed # https://github.com/ryo-ma/github-profile-trophy @@ -77,15 +76,15 @@ dblp_url: # your DBLP profile url discord_id: # your discord id (18-digit unique numerical identifier) facebook_id: # your facebook id flickr_id: # your flickr id -github_username: # your GitHub user name +github_username: fethiozdol # your GitHub user name gitlab_username: # your GitLab user name ieee_id: # your ieeexplore.ieee.org/author/id -instagram_id: # your instagram id +instagram_id: mfotooo # your instagram id kaggle_id: # your kaggle id keybase_username: # your keybase user name lastfm_id: # your lastfm id lattes_id: # your ID on Lattes (Brazilian Lattes CV) -linkedin_username: # your LinkedIn user name +linkedin_username: mfethio # your LinkedIn user name mastodon_username: # your mastodon instance+username in the format instance.tld/@username medium_username: # your Medium username orcid_id: # your ORCID ID @@ -94,7 +93,7 @@ pinterest_id: # your pinterest id publons_id: # your ID on Publons quora_username: # your Quora username research_gate_profile: # your profile on ResearchGate -scholar_userid: qc6CJjYAAAAJ # your Google Scholar ID +scholar_userid: # your Google Scholar ID scopus_id: # your profile on Scopus semanticscholar_id: # your Semantic Scholar ID spotify_id: # your spotify id @@ -106,12 +105,12 @@ whatsapp_number: # your WhatsApp number (full phone number in international form wikidata_id: # your wikidata id wikipedia_id: # your wikipedia id (Case sensitive) work_url: # work page URL -x_username: # your X handle +x_username: mfethio # your X handle youtube_id: # your youtube channel id (youtube.com/@) zotero_username: # your zotero username contact_note: > - You can even add a little note about which of these is the best way to reach you. + I favor text to exchange ideas, so LinkedIn or X is the best way to reach me. # ----------------------------------------------------------------------------- # Analytics and search engine verification @@ -131,8 +130,8 @@ bing_site_verification: # out your bing-site-verification ID (Bing Webmaster) # Blog # ----------------------------------------------------------------------------- -blog_name: al-folio # blog_name will be displayed in your blog page -blog_description: a simple whitespace theme for academics +blog_name: This is My Pattern Blog # blog_name will be displayed in your blog page +blog_description: Setting patterns on software delivery in AWS cloud. # blog_description will be displayed in your blog page permalink: /blog/:year/:title/ lsi: false # produce an index for related posts @@ -147,7 +146,7 @@ related_blog_posts: # Giscus comments (RECOMMENDED) # Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below. giscus: - repo: # / + repo: fethiozdol/fethiozdol.github.io # / repo_id: # leave empty or specify your repo_id (see https://giscus.app/) category: Comments # name of the category under which discussions will be created category_id: # leave empty or specify your category_id (see https://giscus.app/) @@ -160,19 +159,19 @@ giscus: lang: en # Disqus comments (DEPRECATED) -disqus_shortname: al-folio # put your disqus shortname +disqus_shortname: # put your disqus shortname # https://help.disqus.com/en/articles/1717111-what-s-a-shortname # External sources. # If you have blog posts published on medium.com or other external sources, # you can display them in your blog by adding a link to the RSS feed. external_sources: - - name: medium.com - rss_url: https://medium.com/@al-folio/feed - - name: Google Blog - posts: - - url: https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/ - published_date: 2024-05-14 + #- name: medium.com + # rss_url: https://medium.com/@al-folio/feed + # - name: Google Blog + # posts: + # - url: https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/ + # published_date: 2024-05-14 # ----------------------------------------------------------------------------- # Newsletter @@ -241,7 +240,6 @@ exclude: - lighthouse_results/ - package.json - package-lock.json - - _pages/about_einstein.md - purgecss.config.js - README.md - readme_preview/ @@ -303,16 +301,16 @@ jekyll-archives: tag: "/blog/tag/:name/" category: "/blog/category/:name/" -display_tags: ["formatting", "images", "links", "math", "code", "blockquotes"] # these tags will be displayed on the front page of your blog -display_categories: ["external-services"] # these categories will be displayed on the front page of your blog +display_tags: ["devops", "aws", "terraform"] # these tags will be displayed on the front page of your blog +display_categories: ["startup"] # these categories will be displayed on the front page of your blog # ----------------------------------------------------------------------------- # Jekyll Scholar # ----------------------------------------------------------------------------- scholar: - last_name: [Einstein] - first_name: [Albert, A.] + last_name: [Ozdol] + first_name: ["Mehmet Fethi"] style: apa locale: en @@ -564,10 +562,10 @@ third_party_libraries: version: "1.1.0" mermaid: integrity: - js: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A=" + js: "sha256-YbM1pG3wWnzhyYN49g5fPnen+2CKEFaZfopkkwSpNtY=" url: js: "https://cdn.jsdelivr.net/npm/mermaid@{{version}}/dist/mermaid.min.js" - version: "10.7.0" + version: "10.9.1" polyfill: url: js: "https://cdnjs.cloudflare.com/polyfill/v{{version}}/polyfill.min.js?features=es6" diff --git a/_data/coauthors.yml b/_data/coauthors.yml deleted file mode 100644 index 5a989cf..0000000 --- a/_data/coauthors.yml +++ /dev/null @@ -1,34 +0,0 @@ -"adams": - - firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"] - url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams - -"podolsky": - - firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"] - url: https://en.wikipedia.org/wiki/Boris_Podolsky - -"rosen": - - firstname: ["Nathan", "N."] - url: https://en.wikipedia.org/wiki/Nathan_Rosen - -"bach": - - firstname: ["Johann Sebastian", "J. S."] - url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach - - - firstname: ["Carl Philipp Emanuel", "C. P. E."] - url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach - -"przibram": - - firstname: ["Karl"] - url: https://link.springer.com/article/10.1007/s00016-019-00242-z - -"schrodinger": - - firstname: ["Erwin"] - url: https://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger - -"lorentz": - - firstname: ["Hendrik Antoon"] - url: https://en.wikipedia.org/wiki/Hendrik_Lorentz - -"planck": - - firstname: ["Max"] - url: https://en.wikipedia.org/wiki/Max_Planck diff --git a/_data/cv.yml b/_data/cv.yml deleted file mode 100644 index 5885b30..0000000 --- a/_data/cv.yml +++ /dev/null @@ -1,97 +0,0 @@ -- title: General Information - type: map - contents: - - name: Full Name - value: Albert Einstein - - name: Date of Birth - value: 14th March 1879 - - name: Languages - value: English, German - -- title: Education - type: time_table - contents: - - title: PhD - institution: University of Zurich, Zurich, Switzerland - year: 1905 - description: - - Description 1. - - Description 2. - - title: Description 3. - contents: - - Sub-description 1. - - Sub-description 2. - - title: Federal teaching diploma - institution: Eidgenössische Technische Hochschule, Zurich, Switzerland - year: 1900 - description: - - Description 1. - - Description 2. - -- title: Experience - type: time_table - contents: - - title: Professor of Theoretical Physics - institution: Institute for Advanced Study, Princeton University - year: 1933 - 1955 - description: - - Description 1. - - Description 2. - - title: Description 3. - contents: - - Sub-description 1. - - Sub-description 2. - - title: Visiting Professor - institution: California Institute of Technology, Pasadena, California, US - year: 1933 - description: - - Description 1. - - Description 2. - - - title: Director - institution: Kaiser Wilhelm Institute for Physics, Berlin, Germany. - year: 1917-1933 - - - title: Professor of Theoretical Physics - institution: Karl-Ferdinand University, Prague, Czechoslovakia - year: 1911 - 1917 - description: - - - title: Associate Professor of Theoretical Physics - institution: University of Zurich, Zurich, Switzerland - year: 1909 - 1911 - -- title: Open Source Projects - type: time_table - contents: - - title: al-folio - year: 2015-now - description: A beautiful, simple, clean, and responsive Jekyll theme for academics. - -- title: Honors and Awards - type: time_table - contents: - - year: 1921 - items: - - Nobel Prize in Physics - - Matteucci Medal - - year: 2029 - items: - - Max Planck Medal - -- title: Academic Interests - type: nested_list - contents: - - title: Topic 1. - items: - - Description 1. - - Description 2. - - title: Topic 2. - items: - - Description 1. - - Description 2. - -- title: Other Interests - type: list - contents: - - Hobbies: Hobby 1, Hobby 2, etc. diff --git a/_data/repositories.yml b/_data/repositories.yml index 5205c9f..2055b15 100644 --- a/_data/repositories.yml +++ b/_data/repositories.yml @@ -1,12 +1,11 @@ github_users: - - torvalds - - alshedivat + - fethiozdol github_repos: - - alshedivat/al-folio - - twbs/bootstrap - - jekyll/jekyll - - jquery/jquery - - FortAwesome/Font-Awesome - - jpswalsh/academicons - - mathjax/MathJax + # - alshedivat/al-folio + # - twbs/bootstrap + # - jekyll/jekyll + # - jquery/jquery + # - FortAwesome/Font-Awesome + # - jpswalsh/academicons + # - mathjax/MathJax diff --git a/_includes/reading_time.liquid b/_includes/reading_time.liquid new file mode 100644 index 0000000..e5f1e38 --- /dev/null +++ b/_includes/reading_time.liquid @@ -0,0 +1,6 @@ +{% capture words %} +{{ content | number_of_words | minus: 180 }} +{% endcapture %} +{% unless words contains '-' %} + {{ words | plus: 150 | divided_by: 150 | append: ' minutes to read' }} +{% endunless %} diff --git a/_includes/resume/basics.liquid b/_includes/resume/basics.liquid index 3f8d5bf..21fd929 100644 --- a/_includes/resume/basics.liquid +++ b/_includes/resume/basics.liquid @@ -1,5 +1,5 @@ - {% assign skip_basics = 'image,profiles,location' | split: ',' %} + {% assign skip_basics = 'image' | split: ',' %} {% for content in data[1] %} {% if (content[1] == "") or (skip_basics contains @@ -10,7 +10,11 @@ - {% for item in content.keywords %} - - - - - {% endfor %} + + + +
- {{ content[0] | capitalize }} + {% if content[0] == 'profiles' %} + {{ content[1][0].network }} + {% else %} + {{ content[0] | capitalize }} + {% endif %} {% if content[0] == 'url' %} @@ -19,6 +23,10 @@ {{ content[1] }} {% elsif content[0] == 'phone' %} {{ content[1] }} + {% elsif content[0] == 'profiles' %} + {{ content[1][0].url }} + {% elsif content[0] == 'location' %} + {{ content[1].city }}, {{ content[1].countryCode }} {% else %} {{ content[1] }} {% endif %} diff --git a/_includes/resume/education.liquid b/_includes/resume/education.liquid index cebb058..dcce773 100644 --- a/_includes/resume/education.liquid +++ b/_includes/resume/education.liquid @@ -36,10 +36,9 @@
- {{ content.studyType }} + {{ content.institution }}
-
{{ content.institution }}
-
{{ content.area }}
+
{{ content.studyType }}, {{ content.area }}
    {% for item in content.courses %}
  • diff --git a/_includes/resume/projects.liquid b/_includes/resume/projects.liquid index 1620e15..13f1fa8 100644 --- a/_includes/resume/projects.liquid +++ b/_includes/resume/projects.liquid @@ -15,9 +15,13 @@
- {{ content.name }} + {% if content.url %} + {{ content.name }} + {% else %} + {{ content.name }} + {% endif %}
-
{{ content.summary }}
+
{{ content.description }}
    {% for item in content.highlights %}
  • @@ -25,6 +29,11 @@
  • {% endfor %}
+

+ {% for item in content.keywords %} + {{ item }}  + {% endfor %} +

diff --git a/_includes/resume/skills.liquid b/_includes/resume/skills.liquid index 672fd05..b8ffb47 100644 --- a/_includes/resume/skills.liquid +++ b/_includes/resume/skills.liquid @@ -18,14 +18,16 @@ {% endfor %}
{{ content.name }}
- {{ item }} -
+

+ {% for item in content.keywords %} + {{ item }}  + {% endfor %} +

+
diff --git a/_includes/resume/work.liquid b/_includes/resume/work.liquid index f92a599..9016dfc 100644 --- a/_includes/resume/work.liquid +++ b/_includes/resume/work.liquid @@ -34,9 +34,8 @@
- {{ content.position }} + {{ content.position }} @ {{ content.name }}
-
{{ content.name }}
{{ content.summary }}
    {% for item in content.highlights %} diff --git a/_includes/scripts/search.liquid b/_includes/scripts/search.liquid index 550e3b0..91553c6 100644 --- a/_includes/scripts/search.liquid +++ b/_includes/scripts/search.liquid @@ -148,6 +148,15 @@ window.open("mailto:{{ site.email | encode_email }}", "_blank"); }, }, + {%- else if site.email_url -%} + { + id: 'socials-email', + title: 'Send email', + section: 'Socials', + handler: () => { + window.open("{{ site.email_url }}", "_blank"); + }, + }, {%- endif -%} {%- if site.telegram_username -%} { diff --git a/_includes/social.liquid b/_includes/social.liquid index 0e4f395..0ef8638 100644 --- a/_includes/social.liquid +++ b/_includes/social.liquid @@ -1,5 +1,7 @@ {% if site.email %} +{% else %} + {% endif %} {% if site.telegram_username %} diff --git a/_layouts/bib.liquid b/_layouts/bib.liquid deleted file mode 100644 index 5b58600..0000000 --- a/_layouts/bib.liquid +++ /dev/null @@ -1,352 +0,0 @@ ---- ---- -
    - {% if site.enable_publication_thumbnails %} -
    - {%- if entry.abbr -%} - {%- if site.data.venues[entry.abbr] -%} - {% assign venue_style = null %} - {% if site.data.venues[entry.abbr].color != blank %} - {% assign venue_style = site.data.venues[entry.abbr].color | prepend: 'style="background-color:' | append: '"' %} - {%- endif -%} - - {% if site.data.venues[entry.abbr].url %} - {{ entry.abbr }} - {% else %} -
    {{- entry.abbr -}}
    - {% endif %} -
    - {% else %} - {{ entry.abbr }} - {% endif %} - {% endif %} - {% if entry.preview %} - {% if entry.preview contains '://' %} - - {% else %} - {% assign entry_path = entry.preview | prepend: '/assets/img/publication_preview/' %} - {% - include figure.liquid - loading="eager" - path=entry_path - sizes = "200px" - class="preview z-depth-1 rounded" - zoomable=true - alt=entry.preview - %} - {% endif %} - {% endif %} -
    - {% endif %} - - -
    - -
    {{ entry.title }}
    - -
    - {% assign author_array_size = entry.author_array | size %} - - {% assign author_array_limit = author_array_size %} - {% if site.max_author_limit and author_array_size > site.max_author_limit %} - {% assign author_array_limit = site.max_author_limit %} - {% endif %} - - {%- for author in entry.author_array limit: author_array_limit -%} - {% assign author_is_self = false %} - {%- assign author_last_name = author.last | regex_replace: '[*∗†‡§¶‖&^]', '' -%} - {%- assign author_last_html = author.last | regex_replace: '([*∗†‡§¶‖&^]+)', '\1' -%} - {% if site.scholar.last_name contains author_last_name %} - {% if site.scholar.first_name contains author.first %} - {% assign author_is_self = true %} - {% endif %} - {%- endif -%} - {% assign coauthor_url = null %} - {%- assign clean_last_name = author_last_name | downcase | remove_accents -%} - {% if site.data.coauthors[clean_last_name] %} - {%- for coauthor in site.data.coauthors[clean_last_name] -%} - {% if coauthor.firstname contains author.first %} - {%- assign coauthor_url = coauthor.url -%} - {% break %} - {% endif %} - {% endfor %} - {%- endif -%} - - {%- if forloop.length > 1 -%} - {% if forloop.first == false %}, {% endif %} - {%- if forloop.last and author_array_limit == author_array_size %}and {% endif -%} - {% endif %} - {%- if author_is_self -%} - - {{- author.first }} - {{ author_last_html -}} - - {%- else -%} - {%- if coauthor_url -%} - - {{- author.first }} - {{ author_last_html -}} - - {%- else -%} - {{- author.first }} - {{ author_last_html -}} - {% endif %} - {%- endif -%} - {% endfor %} - {%- assign more_authors = author_array_size | minus: author_array_limit -%} - - {%- assign more_authors_hide = more_authors | append: ' more author' -%} - {% if more_authors > 0 %} - {%- if more_authors > 1 -%} - {% assign more_authors_hide = more_authors_hide | append: 's' %} - {%- endif -%} - {% assign more_authors_show = '' %} - {%- for author in entry.author_array offset: author_array_limit -%} - {% assign more_authors_show = more_authors_show | append: author.first | append: ' ' | append: author.last %} - {% unless forloop.last %} - {% assign more_authors_show = more_authors_show | append: ', ' %} - {% endunless %} - {%- endfor -%} - {% assign more_authors_show = more_authors_show | regex_replace: '([*∗†‡§¶‖&^]+)', '\1' %} - , and - - {{- more_authors_hide -}} - - {% endif %} - {% if entry.annotation %} - - - {% endif %} -
    - - - {% assign proceedings = 'inproceedings,incollection' | split: ',' %} - {% assign thesis = 'thesis,mastersthesis,phdthesis' | split: ',' %} - {% if entry.type == 'article' %} - {% capture entrytype %}{{entry.journal}}{% endcapture %} - {% elsif proceedings contains entry.type %} - {% capture entrytype %}In {{entry.booktitle}} {% endcapture %} - {% elsif thesis contains entry.type %} - {% capture entrytype %}{{entry.school}} {% endcapture %} - {% else %} - {% capture entrytype %}{% endcapture %} - {% endif %} - {% if entry.month %} - {% capture entrymonth %}{{ " " }}{{ entry.month | capitalize }}{% endcapture %} - {% endif %} - {% if entry.year %} - {% capture entryyear %}{{ " " }}{{entry.year}}{% endcapture %} - {% endif %} - {% if entry.location %} - {% capture entrytype %}{{entrytype}}{{ ", " }}{{entry.location}}{% endcapture %} - {% endif -%} - {% if entry.additional_info %} - {% capture entrytype %}{{entrytype}}{{entry.additional_info | markdownify | remove: '

    ' | remove: '

    ' }}{% endcapture %} - {% endif %} - {% capture hook_exists %}{% file_exists _includes/hook/bib.liquid %}{% endcapture %} - {% if hook_exists == 'true' %} - {% include hook/bib.liquid %} - {% endif %} - {% assign entrytype_text = entrytype | strip_html | strip %} - {% capture periodical %}{{ entrytype }}{% if entrytype_text != "" and entryyear != "" %}, {% endif %}{{ entrymonth }}{{ entryyear }}{% endcapture %} -
    - {{ periodical | strip }} -
    -
    - {{ entry.note | strip }} -
    - - - - {% if site.enable_publication_badges %} - {% assign entry_has_altmetric_badge = false %} - {% if entry.altmetric and entry.altmetric != 'false' %} - {% assign entry_has_altmetric_badge = true %} - {% endif %} - - {% assign entry_has_dimensions_badge = false %} - {% if entry.dimensions and entry.dimensions != 'false' %} - {% assign entry_has_dimensions_badge = true %} - {% endif %} - - {% assign entry_has_google_scholar_badge = false %} - {% if entry.google_scholar_id %} - {% assign entry_has_google_scholar_badge = true %} - {% endif %} - {% if entry_has_altmetric_badge or entry_has_dimensions_badge or entry_has_google_scholar_badge %} -
    - {% if site.enable_publication_badges.altmetric and entry_has_altmetric_badge %} - - {% endif %} - {% if site.enable_publication_badges.dimensions and entry_has_dimensions_badge %} - - {% endif %} - {% if site.enable_publication_badges.google_scholar and entry_has_google_scholar_badge %} - - {% google_scholar_citations site.scholar_userid entry.google_scholar_id %} Google Scholar citations - - {% endif %} -
    - {% endif %} - {% endif %} - - {% if entry.award %} - - - {% endif %} - - {% if entry.abstract %} - - - {% endif %} - - {% if entry.bibtex_show %} - - - {% endif %} - - {% if entry.video and site.enable_video_embedding %} - - - {% endif %} -
    -
    diff --git a/_layouts/post.liquid b/_layouts/post.liquid index 89e1e6a..0a4d1e3 100644 --- a/_layouts/post.liquid +++ b/_layouts/post.liquid @@ -21,6 +21,7 @@ layout: default Created in {{ page.date | date: '%B %d, %Y' }} {% if page.author %}by {{ page.author }}{% endif %} {% if page.last_updated %}, last updated in {{ page.last_updated | date: '%B %d, %Y' }}{% endif %} + • {% include reading_time.liquid %} {% if page.meta %}• {{ page.meta }}{% endif %}

      -
    • brunch
    • -
    • fixie
    • -
    • raybans
    • -
    • messenger bag
    • -
    - -Hoodie Thundercats retro, tote bag 8-bit Godard craft beer gastropub. Truffaut Tumblr taxidermy, raw denim Kickstarter sartorial dreamcatcher. Quinoa chambray slow-carb salvia readymade, bicycle rights 90's yr typewriter selfies letterpress cardigan vegan. - ---- - -Pug heirloom High Life vinyl swag, single-origin coffee four dollar toast taxidermy reprehenderit fap distillery master cleanse locavore. Est anim sapiente leggings Brooklyn ea. Thundercats locavore excepteur veniam eiusmod. Raw denim Truffaut Schlitz, migas sapiente Portland VHS twee Bushwick Marfa typewriter retro id keytar. - -> We do not grow absolutely, chronologically. We grow sometimes in one dimension, and not in another, unevenly. We grow partially. We are relative. We are mature in one realm, childish in another. -> —Anais Nin - -Fap aliqua qui, scenester pug Echo Park polaroid irony shabby chic ex cardigan church-key Odd Future accusamus. Blog stumptown sartorial squid, gastropub duis aesthetic Truffaut vero. Pinterest tilde twee, odio mumblecore jean shorts lumbersexual. diff --git a/_news/announcement_3.md b/_news/announcement_3.md deleted file mode 100644 index 4d54088..0000000 --- a/_news/announcement_3.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -date: 2016-01-15 07:59:00-0400 -inline: true -related_posts: false ---- - -A simple inline announcement with Markdown emoji! :sparkles: :smile: diff --git a/_pages/about.md b/_pages/about.md index 7740306..81cb5b5 100644 --- a/_pages/about.md +++ b/_pages/about.md @@ -2,24 +2,31 @@ layout: about title: about permalink: / -subtitle: Affiliations. Address. Contacts. Moto. Etc. +subtitle: AWS Solutions Architect, Software Developer, DevOps Engineer. Director @ Xecuta. profile: align: right - image: prof_pic.jpg + image: prof_pic.png image_circular: false # crops the image to make it circular - more_info: > -

    555 your office number

    -

    123 your address street

    -

    Your City, State 12345

    news: true # includes a list of news items -selected_papers: true # includes a list of papers marked as "selected={true}" +selected_papers: false # includes a list of papers marked as "selected={true}" social: true # includes social icons at the bottom of the page --- -Write your biography here. Tell the world about yourself. Link to your favorite [subreddit](http://reddit.com). You can put a picture in, too. The code is already in, just name your picture `prof_pic.jpg` and put it in the `img/` folder. +Hi, I'm Fethi and This is My Pattern. -Put your address / P.O. box / other info right below your picture. You can also disable any of these elements by editing `profile` property of the YAML header of your `_pages/about.md`. Edit `_bibliography/papers.bib` and Jekyll will render your [publications page](/al-folio/publications/) automatically. +I was born and raised in Istanbul, Türkiye and I graduated from [Sabanci University](https://www.sabanciuniv.edu/en) with Bachelor of Science degree in Computer Science and Engineering. -Link to your social media connections, too. This theme is set up to use [Font Awesome icons](https://fontawesome.com/) and [Academicons](https://jpswalsh.github.io/academicons/), like the ones below. Add your Facebook, Twitter, LinkedIn, Google Scholar, or just disable all of them. +My career started in IT as a software developer at [Garanti BBVA Teknoloji](https://www.garantibbvateknoloji.com.tr/) and I worked in the same company for 5 years. During my time at GT, I had my hands on programming languages like Java, C#, PL/I, COBOL, and scripting languages like Unix Bash, Windows BAT, Perl, CA:Gen, JCL, REXX. I'm grateful for my years there as it was a great start to my career by delivering software in banking for millions of active customers. + +I made a switch to platform engineering from software development in 2013. With a significant role in software delivery lifecycle for 100s of developers, I started to think about the bigger picture in software delivery and read more about solution architectures, design patterns and of course, DevOps! + +[Accenture](https://www.accenture.com/gb-en) offered me a DevOps Team Lead role in September 2015 and I moved to London, UK. I took part in many projects for various clients in Public, Healthcare, Retail, and Financial Services industry sectors over 7 years. + +A leap of faith in June 2022 and I left my job at Accenture. I have been contracting as an AWS Solutions Architect since then. I am currently an AWS Solutions Architect @ [eCreation Media Technology](https://www.ecreationmedia.tv/). + +I have entered into 15th year of my career, throughout which I defined and led teams to use and adopt many software development and delivery patterns in AWS cloud. Thanks to the positive feedback I had from my leaders whom I look up to, I have got the motive to take two actions in 2024: + +- Start this blog to share some of my software development and delivery patterns with the wider community. +- [Xecuta](https://xecuta.co.uk) start-up. I act as a director during my spare time as the company builds highly available, scalable and cost-effective Software-as-Service (SaaS). diff --git a/_pages/about_einstein.md b/_pages/about_einstein.md deleted file mode 100644 index 7914a2f..0000000 --- a/_pages/about_einstein.md +++ /dev/null @@ -1,5 +0,0 @@ -Write your biography here. Tell the world about yourself. Link to your favorite [subreddit](http://reddit.com). You can put a picture in, too. The code is already in, just name your picture `prof_pic.jpg` and put it in the `img/` folder. - -Put your address / P.O. box / other info right below your picture. You can also disable any these elements by editing `profile` property of the YAML header of your `_pages/about.md`. Edit `_bibliography/papers.bib` and Jekyll will render your [publications page](/al-folio/publications/) automatically. - -Link to your social media connections, too. This theme is set up to use [Font Awesome icons](https://fontawesome.com/) and [Academicons](https://jpswalsh.github.io/academicons/), like the ones below. Add your Facebook, Twitter, LinkedIn, Google Scholar, or just disable all of them. diff --git a/_pages/cv.md b/_pages/cv.md index ad3e26d..82e81e9 100644 --- a/_pages/cv.md +++ b/_pages/cv.md @@ -3,9 +3,9 @@ layout: cv permalink: /cv/ title: cv nav: true -nav_order: 5 -cv_pdf: example_pdf.pdf -description: This is a description of the page. You can modify it in '_pages/cv.md'. You can also change or remove the top pdf download button. +nav_order: 2 +cv_pdf: cv.pdf +description: toc: sidebar: left --- diff --git a/_pages/dropdown.md b/_pages/dropdown.md deleted file mode 100644 index aa32f22..0000000 --- a/_pages/dropdown.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: submenus -nav: true -nav_order: 8 -dropdown: true -children: - - title: publications - permalink: /publications/ - - title: divider - - title: projects - permalink: /projects/ - - title: divider - - title: blog - permalink: /blog/ ---- diff --git a/_pages/profiles.md b/_pages/profiles.md deleted file mode 100644 index d7ca045..0000000 --- a/_pages/profiles.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: profiles -permalink: /people/ -title: people -description: members of the lab or group -nav: true -nav_order: 7 - -profiles: - # if you want to include more than one profile, just replicate the following block - # and create one content file for each profile inside _pages/ - - align: right - image: prof_pic.jpg - content: about_einstein.md - image_circular: false # crops the image to make it circular - more_info: > -

    555 your office number

    -

    123 your address street

    -

    Your City, State 12345

    - - align: left - image: prof_pic.jpg - content: about_einstein.md - image_circular: false # crops the image to make it circular - more_info: > -

    555 your office number

    -

    123 your address street

    -

    Your City, State 12345

    ---- diff --git a/_pages/projects.md b/_pages/projects.md deleted file mode 100644 index e19d655..0000000 --- a/_pages/projects.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -layout: page -title: projects -permalink: /projects/ -description: A growing collection of your cool projects. -nav: true -nav_order: 3 -display_categories: [work, fun] -horizontal: false ---- - - -
    -{% if site.enable_project_categories and page.display_categories %} - - {% for category in page.display_categories %} - -

    {{ category }}

    -
    - {% assign categorized_projects = site.projects | where: "category", category %} - {% assign sorted_projects = categorized_projects | sort: "importance" %} - - {% if page.horizontal %} -
    -
    - {% for project in sorted_projects %} - {% include projects_horizontal.liquid %} - {% endfor %} -
    -
    - {% else %} -
    - {% for project in sorted_projects %} - {% include projects.liquid %} - {% endfor %} -
    - {% endif %} - {% endfor %} - -{% else %} - - - -{% assign sorted_projects = site.projects | sort: "importance" %} - - - -{% if page.horizontal %} - -
    -
    - {% for project in sorted_projects %} - {% include projects_horizontal.liquid %} - {% endfor %} -
    -
    - {% else %} -
    - {% for project in sorted_projects %} - {% include projects.liquid %} - {% endfor %} -
    - {% endif %} -{% endif %} -
    diff --git a/_pages/publications.md b/_pages/publications.md deleted file mode 100644 index d7c0ee1..0000000 --- a/_pages/publications.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: page -permalink: /publications/ -title: publications -description: publications by categories in reversed chronological order. generated by jekyll-scholar. -nav: true -nav_order: 2 ---- - - -
    - -{% bibliography %} - -
    diff --git a/_pages/repositories.md b/_pages/repositories.md deleted file mode 100644 index 676137d..0000000 --- a/_pages/repositories.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: page -permalink: /repositories/ -title: repositories -description: Edit the `_data/repositories.yml` and change the `github_users` and `github_repos` lists to include your own GitHub profile and repositories. -nav: true -nav_order: 4 ---- - -## GitHub users - -{% if site.data.repositories.github_users %} - -
    - {% for user in site.data.repositories.github_users %} - {% include repository/repo_user.liquid username=user %} - {% endfor %} -
    - ---- - -{% if site.repo_trophies.enabled %} -{% for user in site.data.repositories.github_users %} -{% if site.data.repositories.github_users.size > 1 %} - -

    {{ user }}

    - {% endif %} -
    - {% include repository/repo_trophies.liquid username=user %} -
    - ---- - -{% endfor %} -{% endif %} -{% endif %} - -## GitHub Repositories - -{% if site.data.repositories.github_repos %} - -
    - {% for repo in site.data.repositories.github_repos %} - {% include repository/repo.liquid repository=repo %} - {% endfor %} -
    -{% endif %} diff --git a/_pages/teaching.md b/_pages/teaching.md deleted file mode 100644 index 87bb1a5..0000000 --- a/_pages/teaching.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: page -permalink: /teaching/ -title: teaching -description: Materials for courses you taught. Replace this text with your description. -nav: true -nav_order: 6 ---- - -For now, this page is assumed to be a static description of your courses. You can convert it to a collection similar to `_projects/` so that you can have a dedicated page for each course. - -Organize your courses by years, topics, or universities, however you like! diff --git a/_posts/2015-03-15-formatting-and-links.md b/_posts/2015-03-15-formatting-and-links.md deleted file mode 100644 index 0962756..0000000 --- a/_posts/2015-03-15-formatting-and-links.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: post -title: a post with formatting and links -date: 2015-03-15 16:40:16 -description: march & april, looking forward to summer -tags: formatting links -categories: sample-posts ---- - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. [Pinterest](https://www.pinterest.com) DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -#### Hipster list - -- brunch -- fixie -- raybans -- messenger bag - -#### Check List - -- [x] Brush Teeth -- [ ] Put on socks - - [x] Put on left sock - - [ ] Put on right sock -- [x] Go to school - -Hoodie Thundercats retro, tote bag 8-bit Godard craft beer gastropub. Truffaut Tumblr taxidermy, raw denim Kickstarter sartorial dreamcatcher. Quinoa chambray slow-carb salvia readymade, bicycle rights 90's yr typewriter selfies letterpress cardigan vegan. - -
    - -Pug heirloom High Life vinyl swag, single-origin coffee four dollar toast taxidermy reprehenderit fap distillery master cleanse locavore. Est anim sapiente leggings Brooklyn ea. Thundercats locavore excepteur veniam eiusmod. Raw denim Truffaut Schlitz, migas sapiente Portland VHS twee Bushwick Marfa typewriter retro id keytar. - -> We do not grow absolutely, chronologically. We grow sometimes in one dimension, and not in another, unevenly. We grow partially. We are relative. We are mature in one realm, childish in another. -> —Anais Nin - -Fap aliqua qui, scenester pug Echo Park polaroid irony shabby chic ex cardigan church-key Odd Future accusamus. Blog stumptown sartorial squid, gastropub duis aesthetic Truffaut vero. Pinterest tilde twee, odio mumblecore jean shorts lumbersexual. diff --git a/_posts/2015-05-15-images.md b/_posts/2015-05-15-images.md deleted file mode 100644 index 61f687f..0000000 --- a/_posts/2015-05-15-images.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -layout: post -title: a post with images -date: 2015-05-15 21:01:00 -description: this is what included images could look like -tags: formatting images -categories: sample-posts -thumbnail: assets/img/9.jpg ---- - -This is an example post with image galleries. - -
    -
    - {% include figure.liquid loading="eager" path="assets/img/9.jpg" class="img-fluid rounded z-depth-1" %} -
    -
    - {% include figure.liquid loading="eager" path="assets/img/7.jpg" class="img-fluid rounded z-depth-1" %} -
    -
    -
    - A simple, elegant caption looks good between image rows, after each row, or doesn't have to be there at all. -
    - -Images can be made zoomable. -Simply add `data-zoomable` to `` tags that you want to make zoomable. - -
    -
    - {% include figure.liquid loading="eager" path="assets/img/8.jpg" class="img-fluid rounded z-depth-1" zoomable=true %} -
    -
    - {% include figure.liquid loading="eager" path="assets/img/10.jpg" class="img-fluid rounded z-depth-1" zoomable=true %} -
    -
    - -The rest of the images in this post are all zoomable, arranged into different mini-galleries. - -
    -
    - {% include figure.liquid path="assets/img/11.jpg" class="img-fluid rounded z-depth-1" zoomable=true %} -
    -
    - {% include figure.liquid path="assets/img/12.jpg" class="img-fluid rounded z-depth-1" zoomable=true %} -
    -
    - {% include figure.liquid path="assets/img/7.jpg" class="img-fluid rounded z-depth-1" zoomable=true %} -
    -
    diff --git a/_posts/2015-07-15-code.md b/_posts/2015-07-15-code.md deleted file mode 100644 index c721ec9..0000000 --- a/_posts/2015-07-15-code.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -layout: post -title: a post with code -date: 2015-07-15 15:09:00 -description: an example of a blog post with some code -tags: formatting code -categories: sample-posts -featured: true ---- - -This theme implements a built-in Jekyll feature, the use of Rouge, for syntax highlighting. -It supports more than 100 languages. -This example is in C++. -All you have to do is wrap your code in markdown code tags: - -````markdown -```c++ -code code code -``` -```` - -```c++ -int main(int argc, char const \*argv[]) -{ - string myString; - - cout << "input a string: "; - getline(cin, myString); - int length = myString.length(); - - char charArray = new char * [length]; - - charArray = myString; - for(int i = 0; i < length; ++i){ - cout << charArray[i] << " "; - } - - return 0; -} -``` - -For displaying code in a list item, you have to be aware of the indentation, as stated in this [Stackoverflow answer](https://stackoverflow.com/questions/34987908/embed-a-code-block-in-a-list-item-with-proper-indentation-in-kramdown/38090598#38090598). You must indent your code by **(3 \* bullet_indent_level)** spaces. This is because kramdown (the markdown engine used by Jekyll) indentation for the code block in lists is determined by the column number of the first non-space character after the list item marker. For example: - -````markdown -1. We can put fenced code blocks inside nested bullets, too. - - 1. Like this: - - ```c - printf("Hello, World!"); - ``` - - 2. The key is to indent your fenced block in the same line as the first character of the line. -```` - -Which displays: - -1. We can put fenced code blocks inside nested bullets, too. - - 1. Like this: - - ```c - printf("Hello, World!"); - ``` - - 2. The key is to indent your fenced block in the same line as the first character of the line. - -By default, it does not display line numbers. If you want to display line numbers for every code block, you can set `kramdown.syntax_highlighter_opts.block.line_numbers` to true in your `_config.yml` file. - -If you want to display line numbers for a specific code block, all you have to do is wrap your code in a liquid tag: - -{% raw %} -{% highlight c++ linenos %}
    code code code
    {% endhighlight %} -{% endraw %} - -The keyword `linenos` triggers display of line numbers. -Produces something like this: - -{% highlight c++ linenos %} - -int main(int argc, char const \*argv[]) -{ -string myString; - - cout << "input a string: "; - getline(cin, myString); - int length = myString.length(); - - char charArray = new char * [length]; - - charArray = myString; - for(int i = 0; i < length; ++i){ - cout << charArray[i] << " "; - } - - return 0; - -} - -{% endhighlight %} diff --git a/_posts/2015-10-20-disqus-comments.md b/_posts/2015-10-20-disqus-comments.md deleted file mode 100644 index cf53884..0000000 --- a/_posts/2015-10-20-disqus-comments.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: post -title: a post with disqus comments -date: 2015-10-20 11:59:00-0400 -description: an example of a blog post with disqus comments -tags: comments -categories: sample-posts external-services -disqus_comments: true -related_posts: false ---- - -This post shows how to add DISQUS comments. diff --git a/_posts/2015-10-20-math.md b/_posts/2015-10-20-math.md deleted file mode 100644 index 9ef0657..0000000 --- a/_posts/2015-10-20-math.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: post -title: a post with math -date: 2015-10-20 11:12:00-0400 -description: an example of a blog post with some math -tags: formatting math -categories: sample-posts -related_posts: false ---- - -This theme supports rendering beautiful math in inline and display modes using [MathJax 3](https://www.mathjax.org/) engine. You just need to surround your math expression with `$$`, like `$$ E = mc^2 $$`. If you leave it inside a paragraph, it will produce an inline expression, just like $$ E = mc^2 $$. - -To use display mode, again surround your expression with `$$` and place it as a separate paragraph. Here is an example: - -$$ -\sum_{k=1}^\infty |\langle x, e_k \rangle|^2 \leq \|x\|^2 -$$ - -You can also use `\begin{equation}...\end{equation}` instead of `$$` for display mode math. -MathJax will automatically number equations: - -\begin{equation} -\label{eq:cauchy-schwarz} -\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) -\end{equation} - -and by adding `\label{...}` inside the equation environment, we can now refer to the equation using `\eqref`. - -Note that MathJax 3 is [a major re-write of MathJax](https://docs.mathjax.org/en/latest/upgrading/whats-new-3.0.html) that brought a significant improvement to the loading and rendering speed, which is now [on par with KaTeX](http://www.intmath.com/cg5/katex-mathjax-comparison.php). diff --git a/_posts/2018-12-22-distill.md b/_posts/2018-12-22-distill.md deleted file mode 100644 index 6fa2e8d..0000000 --- a/_posts/2018-12-22-distill.md +++ /dev/null @@ -1,321 +0,0 @@ ---- -layout: distill -title: a distill-style blog post -description: an example of a distill-style blog post and main elements -tags: distill formatting -giscus_comments: true -date: 2021-05-22 -featured: true - -authors: - - name: Albert Einstein - url: "https://en.wikipedia.org/wiki/Albert_Einstein" - affiliations: - name: IAS, Princeton - - name: Boris Podolsky - url: "https://en.wikipedia.org/wiki/Boris_Podolsky" - affiliations: - name: IAS, Princeton - - name: Nathan Rosen - url: "https://en.wikipedia.org/wiki/Nathan_Rosen" - affiliations: - name: IAS, Princeton - -bibliography: 2018-12-22-distill.bib - -# Optionally, you can add a table of contents to your post. -# NOTES: -# - make sure that TOC names match the actual section names -# for hyperlinks within the post to work correctly. -# - we may want to automate TOC generation in the future using -# jekyll-toc plugin (https://github.com/toshimaru/jekyll-toc). -toc: - - name: Equations - # if a section has subsections, you can add them as follows: - # subsections: - # - name: Example Child Subsection 1 - # - name: Example Child Subsection 2 - - name: Citations - - name: Footnotes - - name: Code Blocks - - name: Interactive Plots - - name: Layouts - - name: Other Typography? - -# Below is an example of injecting additional post-specific styles. -# If you use this post as a template, delete this _styles block. -_styles: > - .fake-img { - background: #bbb; - border: 1px solid rgba(0, 0, 0, 0.1); - box-shadow: 0 0px 4px rgba(0, 0, 0, 0.1); - margin-bottom: 12px; - } - .fake-img p { - font-family: monospace; - color: white; - text-align: left; - margin: 12px 0; - text-align: center; - font-size: 16px; - } ---- - -## Equations - -This theme supports rendering beautiful math in inline and display modes using [MathJax 3](https://www.mathjax.org/) engine. -You just need to surround your math expression with `$$`, like `$$ E = mc^2 $$`. -If you leave it inside a paragraph, it will produce an inline expression, just like $$ E = mc^2 $$. - -To use display mode, again surround your expression with `$$` and place it as a separate paragraph. -Here is an example: - -$$ -\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) -$$ - -Note that MathJax 3 is [a major re-write of MathJax](https://docs.mathjax.org/en/latest/upgrading/whats-new-3.0.html) that brought a significant improvement to the loading and rendering speed, which is now [on par with KaTeX](http://www.intmath.com/cg5/katex-mathjax-comparison.php). - ---- - -## Citations - -Citations are then used in the article body with the `` tag. -The key attribute is a reference to the id provided in the bibliography. -The key attribute can take multiple ids, separated by commas. - -The citation is presented inline like this: (a number that displays more information on hover). -If you have an appendix, a bibliography is automatically created and populated in it. - -Distill chose a numerical inline citation style to improve readability of citation dense articles and because many of the benefits of longer citations are obviated by displaying more information on hover. -However, we consider it good style to mention author last names if you discuss something at length and it fits into the flow well — the authors are human and it’s nice for them to have the community associate them with their work. - ---- - -## Footnotes - -Just wrap the text you would like to show up in a footnote in a `` tag. -The number of the footnote will be automatically generated.This will become a hoverable footnote. - ---- - -## Code Blocks - -Syntax highlighting is provided within `` tags. -An example of inline code snippets: `let x = 10;`. -For larger blocks of code, add a `block` attribute: - - - var x = 25; - function(x) { - return x * x; - } - - -**Note:** `` blocks do not look good in the dark mode. -You can always use the default code-highlight using the `highlight` liquid tag: - -{% highlight javascript %} -var x = 25; -function(x) { -return x \* x; -} -{% endhighlight %} - ---- - -## Interactive Plots - -You can add interative plots using plotly + iframes :framed_picture: - -
    - -
    - -The plot must be generated separately and saved into an HTML file. -To generate the plot that you see above, you can use the following code snippet: - -{% highlight python %} -import pandas as pd -import plotly.express as px -df = pd.read_csv( -'https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv' -) -fig = px.density_mapbox( -df, -lat='Latitude', -lon='Longitude', -z='Magnitude', -radius=10, -center=dict(lat=0, lon=180), -zoom=0, -mapbox_style="stamen-terrain", -) -fig.show() -fig.write_html('assets/plotly/demo.html') -{% endhighlight %} - ---- - -## Details boxes - -Details boxes are collapsible boxes which hide additional information from the user. They can be added with the `details` liquid tag: - -{% details Click here to know more %} -Additional details, where math $$ 2x - 1 $$ and `code` is rendered correctly. -{% enddetails %} - ---- - -## Layouts - -The main text column is referred to as the body. -It is the assumed layout of any direct descendants of the `d-article` element. - -
    -

    .l-body

    -
    - -For images you want to display a little larger, try `.l-page`: - -
    -

    .l-page

    -
    - -All of these have an outset variant if you want to poke out from the body text a little bit. -For instance: - -
    -

    .l-body-outset

    -
    - -
    -

    .l-page-outset

    -
    - -Occasionally you’ll want to use the full browser width. -For this, use `.l-screen`. -You can also inset the element a little from the edge of the browser by using the inset variant. - -
    -

    .l-screen

    -
    -
    -

    .l-screen-inset

    -
    - -The final layout is for marginalia, asides, and footnotes. -It does not interrupt the normal flow of `.l-body` sized text except on mobile screen sizes. - -
    -

    .l-gutter

    -
    - ---- - -## Other Typography? - -Emphasis, aka italics, with _asterisks_ (`*asterisks*`) or _underscores_ (`_underscores_`). - -Strong emphasis, aka bold, with **asterisks** or **underscores**. - -Combined emphasis with **asterisks and _underscores_**. - -Strikethrough uses two tildes. ~~Scratch this.~~ - -1. First ordered list item -2. Another item - ⋅⋅\* Unordered sub-list. -3. Actual numbers don't matter, just that it's a number - ⋅⋅1. Ordered sub-list -4. And another item. - -⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). - -⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅ -⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅ -⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) - -- Unordered list can use asterisks - -* Or minuses - -- Or pluses - -[I'm an inline-style link](https://www.google.com) - -[I'm an inline-style link with title](https://www.google.com "Google's Homepage") - -[I'm a reference-style link][Arbitrary case-insensitive reference text] - -[You can use numbers for reference-style link definitions][1] - -Or leave it empty and use the [link text itself]. - -URLs and URLs in angle brackets will automatically get turned into links. -http://www.example.com or and sometimes -example.com (but not on Github, for example). - -Some text to show that the reference links can follow later. - -[arbitrary case-insensitive reference text]: https://www.mozilla.org -[1]: http://slashdot.org -[link text itself]: http://www.reddit.com - -Here's our logo (hover to see the title text): - -Inline-style: -![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1") - -Reference-style: -![alt text][logo] - -[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 2" - -Inline `code` has `back-ticks around` it. - -```javascript -var s = "JavaScript syntax highlighting"; -alert(s); -``` - -```python -s = "Python syntax highlighting" -print s -``` - -``` -No language indicated, so no syntax highlighting. -But let's throw in a tag. -``` - -Colons can be used to align columns. - -| Tables | Are | Cool | -| ------------- | :-----------: | ----: | -| col 3 is | right-aligned | $1600 | -| col 2 is | centered | $12 | -| zebra stripes | are neat | $1 | - -There must be at least 3 dashes separating each header cell. -The outer pipes (|) are optional, and you don't need to make the -raw Markdown line up prettily. You can also use inline Markdown. - -| Markdown | Less | Pretty | -| -------- | --------- | ---------- | -| _Still_ | `renders` | **nicely** | -| 1 | 2 | 3 | - -> Blockquotes are very handy in email to emulate reply text. -> This line is part of the same quote. - -Quote break. - -> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can _put_ **Markdown** into a blockquote. - -Here's a line for us to start with. - -This line is separated from the one above by two newlines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. diff --git a/_posts/2020-09-28-github-metadata.md b/_posts/2020-09-28-github-metadata.md deleted file mode 100644 index 3adbdee..0000000 --- a/_posts/2020-09-28-github-metadata.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -layout: post -title: a post with github metadata -date: 2020-09-28 21:01:00 -description: a quick run down on accessing github metadata. -tags: metadata -categories: sample-posts external-services ---- - -A sample blog page that demonstrates the accessing of github meta data. - -## What does Github-MetaData do? - -- Propagates the site.github namespace with repository metadata -- Setting site variables : - - site.title - - site.description - - site.url - - site.baseurl -- Accessing the metadata - duh. -- Generating edittable links. - -## Additional Reading - -- If you're recieving incorrect/missing data, you may need to perform a Github API authentication. -- Go through this README for more details on the topic. -- This page highlights all the feilds you can access with github-metadata. -
    - -## Example MetaData - -- Host Name : {{ site.github.hostname }} -- URL : {{ site.github.url }} -- BaseURL : {{ site.github.baseurl }} -- Archived : {{ site.github.archived}} -- Contributors : - {% for contributor in site.github.contributors %} - - {{ contributor.login }} - {% endfor %} diff --git a/_posts/2020-09-28-twitter.md b/_posts/2020-09-28-twitter.md deleted file mode 100644 index e99c12d..0000000 --- a/_posts/2020-09-28-twitter.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: post -title: a post with twitter -date: 2020-09-28 11:12:00-0400 -description: an example of a blog post with twitter -tags: formatting -categories: sample-posts external-services ---- - -A sample blog page that demonstrates the inclusion of Tweets/Timelines/etc. - -# Tweet - -An example of displaying a tweet: -{% twitter https://twitter.com/rubygems/status/518821243320287232 %} - -# Timeline - -An example of pulling from a timeline: -{% twitter https://twitter.com/jekyllrb maxwidth=500 limit=3 %} - -# Additional Details - -For more details on using the plugin visit: [jekyll-twitter-plugin](https://github.com/rob-murray/jekyll-twitter-plugin) diff --git a/_posts/2021-07-04-diagrams.md b/_posts/2021-07-04-diagrams.md deleted file mode 100644 index c85baa2..0000000 --- a/_posts/2021-07-04-diagrams.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: post -title: a post with diagrams -date: 2021-07-04 17:39:00 -tags: formatting diagrams -description: an example of a blog post with diagrams -mermaid: - enabled: true - zoomable: true ---- - -This theme supports generating various diagrams from a text description using [mermaid](https://mermaid-js.github.io/mermaid/){:target="\_blank"}. Previously, this was done using the [jekyll-diagrams](https://github.com/zhustec/jekyll-diagrams){:target="\_blank"} plugin. For more information on this matter, see the [related issue](https://github.com/alshedivat/al-folio/issues/1609#issuecomment-1656995674). To disable the zooming feature, set `mermaid.zoomable` to `false` in this post frontmatter. - -## Mermaid - -The diagram below was generated by the following code: - -````markdown -```mermaid -sequenceDiagram - participant John - participant Alice - Alice->>John: Hello John, how are you? - John-->>Alice: Great! -``` -```` - -```mermaid -sequenceDiagram - participant John - participant Alice - Alice->>John: Hello John, how are you? - John-->>Alice: Great! -``` diff --git a/_posts/2022-02-01-redirect.md b/_posts/2022-02-01-redirect.md deleted file mode 100644 index 62be5f3..0000000 --- a/_posts/2022-02-01-redirect.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -title: a post with redirect -date: 2022-02-01 17:39:00 -description: you can also redirect to assets like pdf -redirect: /assets/pdf/example_pdf.pdf ---- - -Redirecting to another page. diff --git a/_posts/2022-12-10-giscus-comments.md b/_posts/2022-12-10-giscus-comments.md deleted file mode 100644 index 72e0847..0000000 --- a/_posts/2022-12-10-giscus-comments.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: post -title: a post with giscus comments -date: 2022-12-10 11:59:00-0400 -description: an example of a blog post with giscus comments -tags: comments -categories: sample-posts external-services -giscus_comments: true -related_posts: false ---- - -This post shows how to add GISCUS comments. diff --git a/_posts/2023-03-20-table-of-contents.md b/_posts/2023-03-20-table-of-contents.md deleted file mode 100644 index ec91cd3..0000000 --- a/_posts/2023-03-20-table-of-contents.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: post -title: a post with table of contents -date: 2023-03-20 11:59:00-0400 -description: an example of a blog post with table of contents -tags: formatting toc -categories: sample-posts -giscus_comments: true -related_posts: false -toc: - beginning: true ---- - -This post shows how to add a table of contents in the beginning of the post. - -## Adding a Table of Contents - -To add a table of contents to a post, simply add - -```yml -toc: - beginning: true -``` - -to the front matter of the post. The table of contents will be automatically generated from the headings in the post. - -### Example of Sub-Heading 1 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -### Example of another Sub-Heading 1 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -## Table of Contents Options - -If you want to learn more about how to customize the table of contents, you can check the [jekyll-toc](https://github.com/toshimaru/jekyll-toc) repository. - -### Example of Sub-Heading 2 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -### Example of another Sub-Heading 2 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. diff --git a/_posts/2023-03-21-tables.md b/_posts/2023-03-21-tables.md deleted file mode 100644 index da1d7e8..0000000 --- a/_posts/2023-03-21-tables.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -layout: post -title: displaying beautiful tables with Bootstrap Tables -date: 2023-03-20 14:37:00-0400 -description: an example of how to use Bootstrap Tables -tags: formatting tables -categories: sample-posts -giscus_comments: true -related_posts: true -pretty_table: true ---- - -Using markdown to display tables is easy. Just use the following syntax: - -```markdown -| Left aligned | Center aligned | Right aligned | -| :----------- | :------------: | ------------: | -| Left 1 | center 1 | right 1 | -| Left 2 | center 2 | right 2 | -| Left 3 | center 3 | right 3 | -``` - -That will generate: - -| Left aligned | Center aligned | Right aligned | -| :----------- | :------------: | ------------: | -| Left 1 | center 1 | right 1 | -| Left 2 | center 2 | right 2 | -| Left 3 | center 3 | right 3 | - -

    - -It is also possible to use HTML to display tables. For example, the following HTML code will display a table with [Bootstrap Table](https://bootstrap-table.com/), loaded from a JSON file: - -{% raw %} - -```html - - - - - - - - -
    IDItem NameItem Price
    -``` - -{% endraw %} - - - - - - - - - -
    IDItem NameItem Price
    - -

    - -By using [Bootstrap Table](https://bootstrap-table.com/) it is possible to create pretty complex tables, with pagination, search, and more. For example, the following HTML code will display a table, loaded from a JSON file, with pagination, search, checkboxes, and header/content alignment. For more information, check the [documentation](https://examples.bootstrap-table.com/index.html). - -{% raw %} - -```html - - - - - - - - - -
    IDItem NameItem Price
    -``` - -{% endraw %} - - - - - - - - - - -
    IDItem NameItem Price
    diff --git a/_posts/2023-04-24-videos.md b/_posts/2023-04-24-videos.md deleted file mode 100644 index d408d6b..0000000 --- a/_posts/2023-04-24-videos.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: post -title: a post with videos -date: 2023-04-24 21:01:00 -description: this is what included videos could look like -tags: formatting videos -categories: sample-posts ---- - -This is an example post with videos. It supports local video files. - -
    -
    - {% include video.liquid path="assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4" class="img-fluid rounded z-depth-1" controls=true autoplay=true %} -
    -
    - {% include video.liquid path="assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4" class="img-fluid rounded z-depth-1" controls=true %} -
    -
    -
    - A simple, elegant caption looks good between video rows, after each row, or doesn't have to be there at all. -
    - -It does also support embedding videos from different sources. Here are some examples: - -
    -
    - {% include video.liquid path="https://www.youtube.com/embed/jNQXAC9IVRw" class="img-fluid rounded z-depth-1" %} -
    -
    - {% include video.liquid path="https://player.vimeo.com/video/524933864?h=1ac4fd9fb4&title=0&byline=0&portrait=0" class="img-fluid rounded z-depth-1" %} -
    -
    diff --git a/_posts/2023-04-25-audios.md b/_posts/2023-04-25-audios.md deleted file mode 100644 index 1f3691c..0000000 --- a/_posts/2023-04-25-audios.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: post -title: a post with audios -date: 2023-04-25 10:25:00 -description: this is what included audios could look like -tags: formatting audios -categories: sample-posts ---- - -This is an example post with audios. It supports local audio files. - -
    -
    - {% include audio.liquid path="assets/audio/epicaly-short-113909.mp3" controls=true %} -
    -
    - {% include audio.liquid path="https://cdn.pixabay.com/download/audio/2022/06/25/audio_69a61cd6d6.mp3" controls=true %} -
    -
    -
    - A simple, elegant caption looks good between video rows, after each row, or doesn't have to be there at all. -
    diff --git a/_posts/2023-04-25-sidebar-table-of-contents.md b/_posts/2023-04-25-sidebar-table-of-contents.md deleted file mode 100644 index 2afb8fc..0000000 --- a/_posts/2023-04-25-sidebar-table-of-contents.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: post -title: a post with table of contents on a sidebar -date: 2023-04-25 10:14:00-0400 -description: an example of a blog post with table of contents on a sidebar -tags: formatting toc sidebar -categories: sample-posts -giscus_comments: true -related_posts: false -toc: - sidebar: left ---- - -This post shows how to add a table of contents as a sidebar. - -## Adding a Table of Contents - -To add a table of contents to a post as a sidebar, simply add - -```yml -toc: - sidebar: left -``` - -to the front matter of the post. The table of contents will be automatically generated from the headings in the post. If you wish to display the sidebar to the right, simply change `left` to `right`. - -### Example of Sub-Heading 1 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -### Example of another Sub-Heading 1 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -## Customizing Your Table of Contents - -{:data-toc-text="Customizing"} - -If you want to learn more about how to customize the table of contents of your sidebar, you can check the [bootstrap-toc](https://afeld.github.io/bootstrap-toc/) documentation. Notice that you can even customize the text of the heading that will be displayed on the sidebar. - -### Example of Sub-Heading 2 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -### Example of another Sub-Heading 2 - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. diff --git a/_posts/2023-05-12-custom-blockquotes.md b/_posts/2023-05-12-custom-blockquotes.md deleted file mode 100644 index fdaf47e..0000000 --- a/_posts/2023-05-12-custom-blockquotes.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -layout: post -title: a post with custom blockquotes -date: 2023-05-12 15:53:00-0400 -description: an example of a blog post with custom blockquotes -tags: formatting blockquotes -categories: sample-posts -giscus_comments: true -related_posts: true ---- - -This post shows how to add custom styles for blockquotes. Based on [jekyll-gitbook](https://github.com/sighingnow/jekyll-gitbook) implementation. - -We decided to support the same custom blockquotes as in [jekyll-gitbook](https://sighingnow.github.io/jekyll-gitbook/jekyll/2022-06-30-tips_warnings_dangers.html), which are also found in a lot of other sites' styles. The styles definitions can be found on the [\_base.scss](https://github.com/alshedivat/al-folio/blob/master/_sass/_base.scss) file, more specifically: - -```scss -/* Tips, warnings, and dangers */ -.post .post-content blockquote { - &.block-tip { - border-color: var(--global-tip-block); - background-color: var(--global-tip-block-bg); - - p { - color: var(--global-tip-block-text); - } - - h1, - h2, - h3, - h4, - h5, - h6 { - color: var(--global-tip-block-title); - } - } - - &.block-warning { - border-color: var(--global-warning-block); - background-color: var(--global-warning-block-bg); - - p { - color: var(--global-warning-block-text); - } - - h1, - h2, - h3, - h4, - h5, - h6 { - color: var(--global-warning-block-title); - } - } - - &.block-danger { - border-color: var(--global-danger-block); - background-color: var(--global-danger-block-bg); - - p { - color: var(--global-danger-block-text); - } - - h1, - h2, - h3, - h4, - h5, - h6 { - color: var(--global-danger-block-title); - } - } -} -``` - -A regular blockquote can be used as following: - -```markdown -> This is a regular blockquote -> and it can be used as usual -``` - -> This is a regular blockquote -> and it can be used as usual - -These custom styles can be used by adding the specific class to the blockquote, as follows: - - - -```markdown -> ##### TIP -> -> A tip can be used when you want to give advice -> related to a certain content. -{: .block-tip } -``` - -> ##### TIP -> -> A tip can be used when you want to give advice -> related to a certain content. -{: .block-tip } - -```markdown -> ##### WARNING -> -> This is a warning, and thus should -> be used when you want to warn the user -{: .block-warning } -``` - -> ##### WARNING -> -> This is a warning, and thus should -> be used when you want to warn the user -{: .block-warning } - -```markdown -> ##### DANGER -> -> This is a danger zone, and thus should -> be used carefully -{: .block-danger } -``` - -> ##### DANGER -> -> This is a danger zone, and thus should -> be used carefully -{: .block-danger } - - diff --git a/_posts/2023-07-04-jupyter-notebook.md b/_posts/2023-07-04-jupyter-notebook.md deleted file mode 100644 index 8c1a1fc..0000000 --- a/_posts/2023-07-04-jupyter-notebook.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: post -title: a post with jupyter notebook -date: 2023-07-04 08:57:00-0400 -description: an example of a blog post with jupyter notebook -tags: formatting jupyter -categories: sample-posts -giscus_comments: true -related_posts: false ---- - -To include a jupyter notebook in a post, you can use the following code: - -{% raw %} - -```liquid -{::nomarkdown} -{% assign jupyter_path = 'assets/jupyter/blog.ipynb' | relative_url %} -{% capture notebook_exists %}{% file_exists assets/jupyter/blog.ipynb %}{% endcapture %} -{% if notebook_exists == 'true' %} - {% jupyter_notebook jupyter_path %} -{% else %} -

    Sorry, the notebook you are looking for does not exist.

    -{% endif %} -{:/nomarkdown} -``` - -{% endraw %} - -Let's break it down: this is possible thanks to [Jekyll Jupyter Notebook plugin](https://github.com/red-data-tools/jekyll-jupyter-notebook) that allows you to embed jupyter notebooks in your posts. It basically calls [`jupyter nbconvert --to html`](https://nbconvert.readthedocs.io/en/latest/usage.html#convert-html) to convert the notebook to an html page and then includes it in the post. Since [Kramdown](https://jekyllrb.com/docs/configuration/markdown/) is the default Markdown renderer for Jekyll, we need to surround the call to the plugin with the [::nomarkdown](https://kramdown.gettalong.org/syntax.html#extensions) tag so that it stops processing this part with Kramdown and outputs the content as-is. - -The plugin takes as input the path to the notebook, but it assumes the file exists. If you want to check if the file exists before calling the plugin, you can use the `file_exists` filter. This avoids getting a 404 error from the plugin and ending up displaying the main page inside of it instead. If the file does not exist, you can output a message to the user. The code displayed above outputs the following: - -{::nomarkdown} -{% assign jupyter_path = "assets/jupyter/blog.ipynb" | relative_url %} -{% capture notebook_exists %}{% file_exists assets/jupyter/blog.ipynb %}{% endcapture %} -{% if notebook_exists == "true" %} -{% jupyter_notebook jupyter_path %} -{% else %} - -

    Sorry, the notebook you are looking for does not exist.

    -{% endif %} -{:/nomarkdown} - -Note that the jupyter notebook supports both light and dark themes. diff --git a/_posts/2023-07-12-post-bibliography.md b/_posts/2023-07-12-post-bibliography.md deleted file mode 100644 index 168356c..0000000 --- a/_posts/2023-07-12-post-bibliography.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: post -title: a post with bibliography -date: 2023-07-12 09:56:00-0400 -description: an example of a blog post with bibliography -tags: formatting bib -categories: sample-posts -giscus_comments: true -related_posts: false -related_publications: true ---- - -This post shows how to add bibliography to simple blog posts. We support every citation style that [jekyll-scholar](https://github.com/inukshuk/jekyll-scholar) does. That means simple citation like {% cite einstein1950meaning %}, multiple citations like {% cite einstein1950meaning einstein1905movement %}, long references like {% reference einstein1905movement %} or also quotes: - -{% quote einstein1905electrodynamics %} -Lorem ipsum dolor sit amet, consectetur adipisicing elit, -sed do eiusmod tempor. - -Lorem ipsum dolor sit amet, consectetur adipisicing. -{% endquote %} - -If you would like something more academic, check the [distill style post]({% post_url 2018-12-22-distill %}). diff --git a/_posts/2023-12-12-tikzjax.md b/_posts/2023-12-12-tikzjax.md deleted file mode 100644 index a0df331..0000000 --- a/_posts/2023-12-12-tikzjax.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: post -title: a post with TikZJax -date: 2023-12-12 22:25:00 -description: this is what included TikZ code could look like -tags: formatting diagrams -categories: sample-posts -tikzjax: true ---- - -This is an example post with TikZ code. TikZJax converts script tags (containing TikZ code) into SVGs. - - diff --git a/_posts/2024-01-26-chartjs.md b/_posts/2024-01-26-chartjs.md deleted file mode 100644 index 210557d..0000000 --- a/_posts/2024-01-26-chartjs.md +++ /dev/null @@ -1,188 +0,0 @@ ---- -layout: post -title: a post with chart.js -date: 2024-01-26 01:04:00 -description: this is what included chart.js code could look like -tags: formatting charts -categories: sample-posts -chart: - chartjs: true ---- - -This is an example post with some [chart.js](https://www.chartjs.org/) code. - -````markdown -```chartjs -{ - "type": "line", - "data": { - "labels": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July" - ], - "datasets": [ - { - "label": "# of bugs", - "fill": false, - "lineTension": 0.1, - "backgroundColor": "rgba(75,192,192,0.4)", - "borderColor": "rgba(75,192,192,1)", - "borderCapStyle": "butt", - "borderDash": [], - "borderDashOffset": 0, - "borderJoinStyle": "miter", - "pointBorderColor": "rgba(75,192,192,1)", - "pointBackgroundColor": "#fff", - "pointBorderWidth": 1, - "pointHoverRadius": 5, - "pointHoverBackgroundColor": "rgba(75,192,192,1)", - "pointHoverBorderColor": "rgba(220,220,220,1)", - "pointHoverBorderWidth": 2, - "pointRadius": 1, - "pointHitRadius": 10, - "data": [ - 65, - 59, - 80, - 81, - 56, - 55, - 40 - ], - "spanGaps": false - } - ] - }, - "options": {} -} -``` -```` - -This is how it looks like: - -```chartjs -{ - "type": "line", - "data": { - "labels": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July" - ], - "datasets": [ - { - "label": "# of bugs", - "fill": false, - "lineTension": 0.1, - "backgroundColor": "rgba(75,192,192,0.4)", - "borderColor": "rgba(75,192,192,1)", - "borderCapStyle": "butt", - "borderDash": [], - "borderDashOffset": 0, - "borderJoinStyle": "miter", - "pointBorderColor": "rgba(75,192,192,1)", - "pointBackgroundColor": "#fff", - "pointBorderWidth": 1, - "pointHoverRadius": 5, - "pointHoverBackgroundColor": "rgba(75,192,192,1)", - "pointHoverBorderColor": "rgba(220,220,220,1)", - "pointHoverBorderWidth": 2, - "pointRadius": 1, - "pointHitRadius": 10, - "data": [ - 65, - 59, - 80, - 81, - 56, - 55, - 40 - ], - "spanGaps": false - } - ] - }, - "options": {} -} -``` - -Also another example chart. - -````markdown -```chartjs -{ - "type": "doughnut", - "data": { - "labels": [ - "Red", - "Blue", - "Yellow" - ], - "datasets": [ - { - "data": [ - 300, - 50, - 100 - ], - "backgroundColor": [ - "#FF6384", - "#36A2EB", - "#FFCE56" - ], - "hoverBackgroundColor": [ - "#FF6384", - "#36A2EB", - "#FFCE56" - ] - } - ] - }, - "options": {} -} -``` -```` - -Which generates: - -```chartjs -{ - "type": "doughnut", - "data": { - "labels": [ - "Red", - "Blue", - "Yellow" - ], - "datasets": [ - { - "data": [ - 300, - 50, - 100 - ], - "backgroundColor": [ - "#FF6384", - "#36A2EB", - "#FFCE56" - ], - "hoverBackgroundColor": [ - "#FF6384", - "#36A2EB", - "#FFCE56" - ] - } - ] - }, - "options": {} -} -``` diff --git a/_posts/2024-01-26-echarts.md b/_posts/2024-01-26-echarts.md deleted file mode 100644 index b496288..0000000 --- a/_posts/2024-01-26-echarts.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -layout: post -title: a post with echarts -date: 2024-01-26 16:03:00 -description: this is what included echarts code could look like -tags: formatting charts -categories: sample-posts -chart: - echarts: true ---- - -This is an example post with some [echarts](https://echarts.apache.org/) code. - -````markdown -```echarts -{ - "title": { - "text": "ECharts Getting Started Example" - }, - "responsive": true, - "tooltip": {}, - "legend": { - "top": "30px", - "data": ["sales"] - }, - "xAxis": { - "data": ["Shirts", "Cardigans", "Chiffons", "Pants", "Heels", "Socks"] - }, - "yAxis": {}, - "series": [ - { - "name": "sales", - "type": "bar", - "data": [5, 20, 36, 10, 10, 20] - } - ] -} -``` -```` - -Which generates: - -```echarts -{ - "title": { - "text": "ECharts Getting Started Example" - }, - "responsive": true, - "tooltip": {}, - "legend": { - "top": "30px", - "data": ["sales"] - }, - "xAxis": { - "data": ["Shirts", "Cardigans", "Chiffons", "Pants", "Heels", "Socks"] - }, - "yAxis": {}, - "series": [ - { - "name": "sales", - "type": "bar", - "data": [5, 20, 36, 10, 10, 20] - } - ] -} -``` - -Note that this library offer support for both light and dark themes. You can switch between them using the theme switcher in the top right corner of the page. diff --git a/_posts/2024-01-26-geojson-map.md b/_posts/2024-01-26-geojson-map.md deleted file mode 100644 index 6909aee..0000000 --- a/_posts/2024-01-26-geojson-map.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -layout: post -title: a post with geojson -date: 2024-01-26 17:57:00 -description: this is what included geojson code could look like -tags: formatting charts maps -categories: sample-posts -map: true ---- - -This is an example post with some [geojson](https://geojson.org/) code. The support is provided thanks to [Leaflet](https://leafletjs.com/). To create your own visualization, go to [geojson.io](https://geojson.io/). - -````markdown -```geojson -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": {}, - "geometry": { - "coordinates": [ - [ - [ - -60.11363029935569, - -2.904625022183211 - ], - [ - -60.11363029935569, - -3.162613728707967 - ], - [ - -59.820894493858034, - -3.162613728707967 - ], - [ - -59.820894493858034, - -2.904625022183211 - ], - [ - -60.11363029935569, - -2.904625022183211 - ] - ] - ], - "type": "Polygon" - } - } - ] -} -``` -```` - -Which generates: - -```geojson -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": {}, - "geometry": { - "coordinates": [ - [ - [ - -60.11363029935569, - -2.904625022183211 - ], - [ - -60.11363029935569, - -3.162613728707967 - ], - [ - -59.820894493858034, - -3.162613728707967 - ], - [ - -59.820894493858034, - -2.904625022183211 - ], - [ - -60.11363029935569, - -2.904625022183211 - ] - ] - ], - "type": "Polygon" - } - } - ] -} -``` diff --git a/_posts/2024-01-27-advanced-images.md b/_posts/2024-01-27-advanced-images.md deleted file mode 100644 index 3baa160..0000000 --- a/_posts/2024-01-27-advanced-images.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: post -title: a post with advanced image components -date: 2024-01-27 11:46:00 -description: this is what advanced image components could look like -tags: formatting images -categories: sample-posts -thumbnail: assets/img/9.jpg -images: - compare: true - slider: true ---- - -This is an example post with advanced image components. - -## Image Slider - -This is a simple image slider. It uses the [Swiper](https://swiperjs.com/) library. Check the [examples page](https://swiperjs.com/demos) for more information of what you can achieve with it. - - - {% include figure.liquid loading="eager" path="assets/img/9.jpg" class="img-fluid rounded z-depth-1" %} - {% include figure.liquid loading="eager" path="assets/img/7.jpg" class="img-fluid rounded z-depth-1" %} - {% include figure.liquid loading="eager" path="assets/img/8.jpg" class="img-fluid rounded z-depth-1" %} - {% include figure.liquid loading="eager" path="assets/img/10.jpg" class="img-fluid rounded z-depth-1" %} - {% include figure.liquid loading="eager" path="assets/img/12.jpg" class="img-fluid rounded z-depth-1" %} - - -## Image Comparison Slider - -This is a simple image comparison slider. It uses the [img-comparison-slider](https://img-comparison-slider.sneas.io/) library. Check the [examples page](https://img-comparison-slider.sneas.io/examples.html) for more information of what you can achieve with it. - - - {% include figure.liquid path="assets/img/prof_pic.jpg" class="img-fluid rounded z-depth-1" slot="first" %} - {% include figure.liquid path="assets/img/prof_pic_color.png" class="img-fluid rounded z-depth-1" slot="second" %} - diff --git a/_posts/2024-01-27-code-diff.md b/_posts/2024-01-27-code-diff.md deleted file mode 100644 index 6ec06d5..0000000 --- a/_posts/2024-01-27-code-diff.md +++ /dev/null @@ -1,473 +0,0 @@ ---- -layout: post -title: a post with code diff -date: 2024-01-27 19:22:00 -description: this is how you can display code diffs -tags: formatting code -categories: sample-posts -code_diff: true ---- - -You can display diff code by using the regular markdown syntax: - -````markdown -```diff -diff --git a/sample.js b/sample.js -index 0000001..0ddf2ba ---- a/sample.js -+++ b/sample.js -@@ -1 +1 @@ --console.log("Hello World!") -+console.log("Hello from Diff2Html!") -``` -```` - -Which generates: - -```diff -diff --git a/sample.js b/sample.js -index 0000001..0ddf2ba ---- a/sample.js -+++ b/sample.js -@@ -1 +1 @@ --console.log("Hello World!") -+console.log("Hello from Diff2Html!") -``` - -But this is difficult to read, specially if you have a large diff. You can use [diff2html](https://diff2html.xyz/) to display a more readable version of the diff. For this, just use `diff2html` instead of `diff` for the code block language: - -````markdown -```diff2html -diff --git a/sample.js b/sample.js -index 0000001..0ddf2ba ---- a/sample.js -+++ b/sample.js -@@ -1 +1 @@ --console.log("Hello World!") -+console.log("Hello from Diff2Html!") -``` -```` - -If we use a longer example, for example [this commit from diff2html](https://github.com/rtfpessoa/diff2html/commit/c2c253d3e3f8b8b267f551e659f72b44ca2ac927), it will generate the following output: - -```diff2html -From 2aaae31cc2a37bfff83430c2c914b140bee59b6a Mon Sep 17 00:00:00 2001 -From: Rodrigo Fernandes -Date: Sun, 9 Oct 2016 16:41:54 +0100 -Subject: [PATCH 1/2] Initial template override support - ---- - scripts/hulk.js | 4 ++-- - src/diff2html.js | 3 +-- - src/file-list-printer.js | 11 ++++++++--- - src/hoganjs-utils.js | 29 +++++++++++++++++------------ - src/html-printer.js | 6 ++++++ - src/line-by-line-printer.js | 6 +++++- - src/side-by-side-printer.js | 6 +++++- - test/file-list-printer-tests.js | 2 +- - test/hogan-cache-tests.js | 18 +++++++++++++++--- - test/line-by-line-tests.js | 3 +-- - test/side-by-side-printer-tests.js | 3 +-- - 11 files changed, 62 insertions(+), 29 deletions(-) - -diff --git a/scripts/hulk.js b/scripts/hulk.js -index 5a793c18..a4b1a4d5 100755 ---- a/scripts/hulk.js -+++ b/scripts/hulk.js -@@ -173,11 +173,11 @@ function namespace(name) { - // write a template foreach file that matches template extension - templates = extractFiles(options.argv.remain) - .map(function(file) { -- var openedFile = fs.readFileSync(file, 'utf-8'); -+ var openedFile = fs.readFileSync(file, 'utf-8').trim(); - var name; - if (!openedFile) return; - name = namespace(path.basename(file).replace(/\..*$/, '')); -- openedFile = removeByteOrderMark(openedFile.trim()); -+ openedFile = removeByteOrderMark(openedFile); - openedFile = wrap(file, name, openedFile); - if (!options.outputdir) return openedFile; - fs.writeFileSync(path.join(options.outputdir, name + '.js') -diff --git a/src/diff2html.js b/src/diff2html.js -index 21b0119e..64e138f5 100644 ---- a/src/diff2html.js -+++ b/src/diff2html.js -@@ -7,7 +7,6 @@ - - (function() { - var diffParser = require('./diff-parser.js').DiffParser; -- var fileLister = require('./file-list-printer.js').FileListPrinter; - var htmlPrinter = require('./html-printer.js').HtmlPrinter; - - function Diff2Html() { -@@ -43,7 +42,7 @@ - - var fileList = ''; - if (configOrEmpty.showFiles === true) { -- fileList = fileLister.generateFileList(diffJson, configOrEmpty); -+ fileList = htmlPrinter.generateFileListSummary(diffJson, configOrEmpty); - } - - var diffOutput = ''; -diff --git a/src/file-list-printer.js b/src/file-list-printer.js -index e408d9b2..1e0a2c61 100644 ---- a/src/file-list-printer.js -+++ b/src/file-list-printer.js -@@ -8,11 +8,16 @@ - (function() { - var printerUtils = require('./printer-utils.js').PrinterUtils; - -- var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; -+ var hoganUtils; -+ - var baseTemplatesPath = 'file-summary'; - var iconsBaseTemplatesPath = 'icon'; - -- function FileListPrinter() { -+ function FileListPrinter(config) { -+ this.config = config; -+ -+ var HoganJsUtils = require('./hoganjs-utils.js').HoganJsUtils; -+ hoganUtils = new HoganJsUtils(config); - } - - FileListPrinter.prototype.generateFileList = function(diffFiles) { -@@ -38,5 +43,5 @@ - }); - }; - -- module.exports.FileListPrinter = new FileListPrinter(); -+ module.exports.FileListPrinter = FileListPrinter; - })(); -diff --git a/src/hoganjs-utils.js b/src/hoganjs-utils.js -index 9949e5fa..0dda08d7 100644 ---- a/src/hoganjs-utils.js -+++ b/src/hoganjs-utils.js -@@ -8,18 +8,19 @@ - (function() { - var fs = require('fs'); - var path = require('path'); -- - var hogan = require('hogan.js'); - - var hoganTemplates = require('./templates/diff2html-templates.js'); - -- var templatesPath = path.resolve(__dirname, 'templates'); -+ var extraTemplates; - -- function HoganJsUtils() { -+ function HoganJsUtils(configuration) { -+ this.config = configuration || {}; -+ extraTemplates = this.config.templates || {}; - } - -- HoganJsUtils.prototype.render = function(namespace, view, params, configuration) { -- var template = this.template(namespace, view, configuration); -+ HoganJsUtils.prototype.render = function(namespace, view, params) { -+ var template = this.template(namespace, view); - if (template) { - return template.render(params); - } -@@ -27,17 +28,16 @@ - return null; - }; - -- HoganJsUtils.prototype.template = function(namespace, view, configuration) { -- var config = configuration || {}; -+ HoganJsUtils.prototype.template = function(namespace, view) { - var templateKey = this._templateKey(namespace, view); - -- return this._getTemplate(templateKey, config); -+ return this._getTemplate(templateKey); - }; - -- HoganJsUtils.prototype._getTemplate = function(templateKey, config) { -+ HoganJsUtils.prototype._getTemplate = function(templateKey) { - var template; - -- if (!config.noCache) { -+ if (!this.config.noCache) { - template = this._readFromCache(templateKey); - } - -@@ -53,6 +53,7 @@ - - try { - if (fs.readFileSync) { -+ var templatesPath = path.resolve(__dirname, 'templates'); - var templatePath = path.join(templatesPath, templateKey); - var templateContent = fs.readFileSync(templatePath + '.mustache', 'utf8'); - template = hogan.compile(templateContent); -@@ -66,12 +67,16 @@ - }; - - HoganJsUtils.prototype._readFromCache = function(templateKey) { -- return hoganTemplates[templateKey]; -+ return extraTemplates[templateKey] || hoganTemplates[templateKey]; - }; - - HoganJsUtils.prototype._templateKey = function(namespace, view) { - return namespace + '-' + view; - }; - -- module.exports.HoganJsUtils = new HoganJsUtils(); -+ HoganJsUtils.prototype.compile = function(templateStr) { -+ return hogan.compile(templateStr); -+ }; -+ -+ module.exports.HoganJsUtils = HoganJsUtils; - })(); -diff --git a/src/html-printer.js b/src/html-printer.js -index 585d5b66..13f83047 100644 ---- a/src/html-printer.js -+++ b/src/html-printer.js -@@ -8,6 +8,7 @@ - (function() { - var LineByLinePrinter = require('./line-by-line-printer.js').LineByLinePrinter; - var SideBySidePrinter = require('./side-by-side-printer.js').SideBySidePrinter; -+ var FileListPrinter = require('./file-list-printer.js').FileListPrinter; - - function HtmlPrinter() { - } -@@ -22,5 +23,10 @@ - return sideBySidePrinter.generateSideBySideJsonHtml(diffFiles); - }; - -+ HtmlPrinter.prototype.generateFileListSummary = function(diffJson, config) { -+ var fileListPrinter = new FileListPrinter(config); -+ return fileListPrinter.generateFileList(diffJson); -+ }; -+ - module.exports.HtmlPrinter = new HtmlPrinter(); - })(); -diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js -index b07eb53c..d230bedd 100644 ---- a/src/line-by-line-printer.js -+++ b/src/line-by-line-printer.js -@@ -11,7 +11,8 @@ - var utils = require('./utils.js').Utils; - var Rematch = require('./rematch.js').Rematch; - -- var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; -+ var hoganUtils; -+ - var genericTemplatesPath = 'generic'; - var baseTemplatesPath = 'line-by-line'; - var iconsBaseTemplatesPath = 'icon'; -@@ -19,6 +20,9 @@ - - function LineByLinePrinter(config) { - this.config = config; -+ -+ var HoganJsUtils = require('./hoganjs-utils.js').HoganJsUtils; -+ hoganUtils = new HoganJsUtils(config); - } - - LineByLinePrinter.prototype.makeFileDiffHtml = function(file, diffs) { -diff --git a/src/side-by-side-printer.js b/src/side-by-side-printer.js -index bbf1dc8d..5e3033b3 100644 ---- a/src/side-by-side-printer.js -+++ b/src/side-by-side-printer.js -@@ -11,7 +11,8 @@ - var utils = require('./utils.js').Utils; - var Rematch = require('./rematch.js').Rematch; - -- var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; -+ var hoganUtils; -+ - var genericTemplatesPath = 'generic'; - var baseTemplatesPath = 'side-by-side'; - var iconsBaseTemplatesPath = 'icon'; -@@ -26,6 +27,9 @@ - - function SideBySidePrinter(config) { - this.config = config; -+ -+ var HoganJsUtils = require('./hoganjs-utils.js').HoganJsUtils; -+ hoganUtils = new HoganJsUtils(config); - } - - SideBySidePrinter.prototype.makeDiffHtml = function(file, diffs) { -diff --git a/test/file-list-printer-tests.js b/test/file-list-printer-tests.js -index a502a46f..60ea3208 100644 ---- a/test/file-list-printer-tests.js -+++ b/test/file-list-printer-tests.js -@@ -1,6 +1,6 @@ - var assert = require('assert'); - --var fileListPrinter = require('../src/file-list-printer.js').FileListPrinter; -+var fileListPrinter = new (require('../src/file-list-printer.js').FileListPrinter)(); - - describe('FileListPrinter', function() { - describe('generateFileList', function() { -diff --git a/test/hogan-cache-tests.js b/test/hogan-cache-tests.js -index 190bf6f8..3bb754ac 100644 ---- a/test/hogan-cache-tests.js -+++ b/test/hogan-cache-tests.js -@@ -1,6 +1,6 @@ - var assert = require('assert'); - --var HoganJsUtils = require('../src/hoganjs-utils.js').HoganJsUtils; -+var HoganJsUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)(); - var diffParser = require('../src/diff-parser.js').DiffParser; - - describe('HoganJsUtils', function() { -@@ -21,16 +21,28 @@ describe('HoganJsUtils', function() { - }); - assert.equal(emptyDiffHtml, result); - }); -+ - it('should render view without cache', function() { - var result = HoganJsUtils.render('generic', 'empty-diff', { - contentClass: 'd2h-code-line', - diffParser: diffParser - }, {noCache: true}); -- assert.equal(emptyDiffHtml + '\n', result); -+ assert.equal(emptyDiffHtml, result); - }); -+ - it('should return null if template is missing', function() { -- var result = HoganJsUtils.render('generic', 'missing-template', {}, {noCache: true}); -+ var hoganUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)({noCache: true}); -+ var result = hoganUtils.render('generic', 'missing-template', {}); - assert.equal(null, result); - }); -+ -+ it('should allow templates to be overridden', function() { -+ var emptyDiffTemplate = HoganJsUtils.compile('

    {{myName}}

    '); -+ -+ var config = {templates: {'generic-empty-diff': emptyDiffTemplate}}; -+ var hoganUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)(config); -+ var result = hoganUtils.render('generic', 'empty-diff', {myName: 'Rodrigo Fernandes'}); -+ assert.equal('

    Rodrigo Fernandes

    ', result); -+ }); - }); - }); -diff --git a/test/line-by-line-tests.js b/test/line-by-line-tests.js -index 1cd92073..8869b3df 100644 ---- a/test/line-by-line-tests.js -+++ b/test/line-by-line-tests.js -@@ -14,7 +14,7 @@ describe('LineByLinePrinter', function() { - ' File without changes\n' + - '
\n' + - ' \n' + -- '\n'; -+ ''; - - assert.equal(expected, fileHtml); - }); -@@ -422,7 +422,6 @@ describe('LineByLinePrinter', function() { - ' \n' + - ' \n' + - '\n' + -- '\n' + - ' \n' + - ' \n' + - ' \n' + -diff --git a/test/side-by-side-printer-tests.js b/test/side-by-side-printer-tests.js -index 76625f8e..771daaa5 100644 ---- a/test/side-by-side-printer-tests.js -+++ b/test/side-by-side-printer-tests.js -@@ -14,7 +14,7 @@ describe('SideBySidePrinter', function() { - ' File without changes\n' + - ' \n' + - ' \n' + -- '\n'; -+ ''; - - assert.equal(expectedRight, fileHtml.right); - assert.equal(expectedLeft, fileHtml.left); -@@ -324,7 +324,6 @@ describe('SideBySidePrinter', function() { - ' \n' + - ' \n' + - '\n' + -- '\n' + - ' \n' + - ' \n' + - ' \n' + - -From f3cadb96677d0eb82fc2752dc3ffbf35ca9b5bdb Mon Sep 17 00:00:00 2001 -From: Rodrigo Fernandes -Date: Sat, 15 Oct 2016 13:21:22 +0100 -Subject: [PATCH 2/2] Allow uncompiled templates - ---- - README.md | 3 +++ - src/hoganjs-utils.js | 7 +++++++ - test/hogan-cache-tests.js | 24 +++++++++++++++++++++++- - 3 files changed, 33 insertions(+), 1 deletion(-) - -diff --git a/README.md b/README.md -index 132c8a28..46909f25 100644 ---- a/README.md -+++ b/README.md -@@ -98,6 +98,9 @@ The HTML output accepts a Javascript object with configuration. Possible options - - `synchronisedScroll`: scroll both panes in side-by-side mode: `true` or `false`, default is `false` - - `matchWordsThreshold`: similarity threshold for word matching, default is 0.25 - - `matchingMaxComparisons`: perform at most this much comparisons for line matching a block of changes, default is `2500` -+ - `templates`: object with previously compiled templates to replace parts of the html -+ - `rawTemplates`: object with raw not compiled templates to replace parts of the html -+ > For more information regarding the possible templates look into [src/templates](https://github.com/rtfpessoa/diff2html/tree/master/src/templates) - - ## Diff2HtmlUI Helper - -diff --git a/src/hoganjs-utils.js b/src/hoganjs-utils.js -index 0dda08d7..b2e9c275 100644 ---- a/src/hoganjs-utils.js -+++ b/src/hoganjs-utils.js -@@ -17,6 +17,13 @@ - function HoganJsUtils(configuration) { - this.config = configuration || {}; - extraTemplates = this.config.templates || {}; -+ -+ var rawTemplates = this.config.rawTemplates || {}; -+ for (var templateName in rawTemplates) { -+ if (rawTemplates.hasOwnProperty(templateName)) { -+ if (!extraTemplates[templateName]) extraTemplates[templateName] = this.compile(rawTemplates[templateName]); -+ } -+ } - } - - HoganJsUtils.prototype.render = function(namespace, view, params) { -diff --git a/test/hogan-cache-tests.js b/test/hogan-cache-tests.js -index 3bb754ac..a34839c0 100644 ---- a/test/hogan-cache-tests.js -+++ b/test/hogan-cache-tests.js -@@ -36,7 +36,7 @@ describe('HoganJsUtils', function() { - assert.equal(null, result); - }); - -- it('should allow templates to be overridden', function() { -+ it('should allow templates to be overridden with compiled templates', function() { - var emptyDiffTemplate = HoganJsUtils.compile('

{{myName}}

'); - - var config = {templates: {'generic-empty-diff': emptyDiffTemplate}}; -@@ -44,5 +44,27 @@ describe('HoganJsUtils', function() { - var result = hoganUtils.render('generic', 'empty-diff', {myName: 'Rodrigo Fernandes'}); - assert.equal('

Rodrigo Fernandes

', result); - }); -+ -+ it('should allow templates to be overridden with uncompiled templates', function() { -+ var emptyDiffTemplate = '

{{myName}}

'; -+ -+ var config = {rawTemplates: {'generic-empty-diff': emptyDiffTemplate}}; -+ var hoganUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)(config); -+ var result = hoganUtils.render('generic', 'empty-diff', {myName: 'Rodrigo Fernandes'}); -+ assert.equal('

Rodrigo Fernandes

', result); -+ }); -+ -+ it('should allow templates to be overridden giving priority to compiled templates', function() { -+ var emptyDiffTemplate = HoganJsUtils.compile('

{{myName}}

'); -+ var emptyDiffTemplateUncompiled = '

Not used!

'; -+ -+ var config = { -+ templates: {'generic-empty-diff': emptyDiffTemplate}, -+ rawTemplates: {'generic-empty-diff': emptyDiffTemplateUncompiled} -+ }; -+ var hoganUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)(config); -+ var result = hoganUtils.render('generic', 'empty-diff', {myName: 'Rodrigo Fernandes'}); -+ assert.equal('

Rodrigo Fernandes

', result); -+ }); - }); - }); -``` diff --git a/_posts/2024-01-27-vega-lite.md b/_posts/2024-01-27-vega-lite.md deleted file mode 100644 index 099eb88..0000000 --- a/_posts/2024-01-27-vega-lite.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -layout: post -title: a post with vega lite -date: 2024-01-27 00:20:00 -last_updated: 2024-04-14 04:30:00 -description: this is what included vega lite code could look like -tags: formatting charts -categories: sample-posts -chart: - vega_lite: true ---- - -This is an example post with some [vega lite](https://vega.github.io/vega-lite/) code. - -````markdown -```vega_lite -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "description": "A dot plot showing each movie in the database, and the difference from the average movie rating. The display is sorted by year to visualize everything in sequential order. The graph is for all Movies before 2019.", - "data": { - "url": "https://raw.githubusercontent.com/vega/vega/main/docs/data/movies.json" - }, - "transform": [ - {"filter": "datum['IMDB Rating'] != null"}, - {"filter": {"timeUnit": "year", "field": "Release Date", "range": [null, 2019]}}, - { - "joinaggregate": [{ - "op": "mean", - "field": "IMDB Rating", - "as": "AverageRating" - }] - }, - { - "calculate": "datum['IMDB Rating'] - datum.AverageRating", - "as": "RatingDelta" - } - ], - "mark": "point", - "encoding": { - "x": { - "field": "Release Date", - "type": "temporal" - }, - "y": { - "field": "RatingDelta", - "type": "quantitative", - "title": "Rating Delta" - }, - "color": { - "field": "RatingDelta", - "type": "quantitative", - "scale": {"domainMid": 0}, - "title": "Rating Delta" - } - } -} -``` -```` - -Which generates: - -```vega_lite -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "description": "A dot plot showing each movie in the database, and the difference from the average movie rating. The display is sorted by year to visualize everything in sequential order. The graph is for all Movies before 2019.", - "data": { - "url": "https://raw.githubusercontent.com/vega/vega/main/docs/data/movies.json" - }, - "transform": [ - {"filter": "datum['IMDB Rating'] != null"}, - {"filter": {"timeUnit": "year", "field": "Release Date", "range": [null, 2019]}}, - { - "joinaggregate": [{ - "op": "mean", - "field": "IMDB Rating", - "as": "AverageRating" - }] - }, - { - "calculate": "datum['IMDB Rating'] - datum.AverageRating", - "as": "RatingDelta" - } - ], - "mark": "point", - "encoding": { - "x": { - "field": "Release Date", - "type": "temporal" - }, - "y": { - "field": "RatingDelta", - "type": "quantitative", - "title": "Rating Delta" - }, - "color": { - "field": "RatingDelta", - "type": "quantitative", - "scale": {"domainMid": 0}, - "title": "Rating Delta" - } - } -} -``` - -This plot supports both light and dark themes. diff --git a/_posts/2024-04-15-pseudocode.md b/_posts/2024-04-15-pseudocode.md deleted file mode 100644 index d7ff18b..0000000 --- a/_posts/2024-04-15-pseudocode.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -layout: post -title: a post with pseudo code -date: 2024-04-15 00:01:00 -description: this is what included pseudo code could look like -tags: formatting code -categories: sample-posts -pseudocode: true ---- - -This is an example post with some pseudo code rendered by [pseudocode](https://github.com/SaswatPadhi/pseudocode.js). The example presented here is the same as the one in the [pseudocode.js](https://saswat.padhi.me/pseudocode.js/) documentation, with only one simple but important change: everytime you would use `$`, you should use `$$` instead. Also, note that the `pseudocode` key in the front matter is set to `true` to enable the rendering of pseudo code. As an example, using this code: - -````markdown -```pseudocode -% This quicksort algorithm is extracted from Chapter 7, Introduction to Algorithms (3rd edition) -\begin{algorithm} -\caption{Quicksort} -\begin{algorithmic} -\PROCEDURE{Quicksort}{$$A, p, r$$} - \IF{$$p < r$$} - \STATE $$q = $$ \CALL{Partition}{$$A, p, r$$} - \STATE \CALL{Quicksort}{$$A, p, q - 1$$} - \STATE \CALL{Quicksort}{$$A, q + 1, r$$} - \ENDIF -\ENDPROCEDURE -\PROCEDURE{Partition}{$$A, p, r$$} - \STATE $$x = A[r]$$ - \STATE $$i = p - 1$$ - \FOR{$$j = p$$ \TO $$r - 1$$} - \IF{$$A[j] < x$$} - \STATE $$i = i + 1$$ - \STATE exchange - $$A[i]$$ with $$A[j]$$ - \ENDIF - \STATE exchange $$A[i]$$ with $$A[r]$$ - \ENDFOR -\ENDPROCEDURE -\end{algorithmic} -\end{algorithm} -``` -```` - -Generates: - -```pseudocode -% This quicksort algorithm is extracted from Chapter 7, Introduction to Algorithms (3rd edition) -\begin{algorithm} -\caption{Quicksort} -\begin{algorithmic} -\PROCEDURE{Quicksort}{$$A, p, r$$} - \IF{$$p < r$$} - \STATE $$q = $$ \CALL{Partition}{$$A, p, r$$} - \STATE \CALL{Quicksort}{$$A, p, q - 1$$} - \STATE \CALL{Quicksort}{$$A, q + 1, r$$} - \ENDIF -\ENDPROCEDURE -\PROCEDURE{Partition}{$$A, p, r$$} - \STATE $$x = A[r]$$ - \STATE $$i = p - 1$$ - \FOR{$$j = p$$ \TO $$r - 1$$} - \IF{$$A[j] < x$$} - \STATE $$i = i + 1$$ - \STATE exchange - $$A[i]$$ with $$A[j]$$ - \ENDIF - \STATE exchange $$A[i]$$ with $$A[r]$$ - \ENDFOR -\ENDPROCEDURE -\end{algorithmic} -\end{algorithm} -``` diff --git a/_posts/2024-04-28-post-citation.md b/_posts/2024-04-28-post-citation.md deleted file mode 100644 index 4b47a27..0000000 --- a/_posts/2024-04-28-post-citation.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: post -title: a post that can be cited -date: 2024-04-28 15:06:00 -description: this is what a post that can be cited looks like -tags: formatting citation -categories: sample-posts -citation: true ---- - -This is an example post that can be cited. The content of the post ends here, while the citation information is automatically provided below. The only thing needed is for you to set the `citation` key in the front matter to `true`. diff --git a/_posts/2024-04-29-typograms.md b/_posts/2024-04-29-typograms.md deleted file mode 100644 index 6caff4e..0000000 --- a/_posts/2024-04-29-typograms.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -layout: post -title: a post with typograms -date: 2024-04-29 23:36:10 -description: this is what included typograms code could look like -tags: formatting diagrams -categories: sample-posts -typograms: true ---- - -This is an example post with some [typograms](https://github.com/google/typograms/) code. - -````markdown -```typograms -+----+ -| |---> My first diagram! -+----+ -``` -```` - -Which generates: - -```typograms -+----+ -| |---> My first diagram! -+----+ -``` - -Another example: - -````markdown -```typograms -.------------------------. -|.----------------------.| -||"https://example.com" || -|'----------------------'| -| ______________________ | -|| || -|| Welcome! || -|| || -|| || -|| .----------------. || -|| | username | || -|| '----------------' || -|| .----------------. || -|| |"*******" | || -|| '----------------' || -|| || -|| .----------------. || -|| | "Sign-up" | || -|| '----------------' || -|| || -|+----------------------+| -.------------------------. -``` -```` - -which generates: - -```typograms -.------------------------. -|.----------------------.| -||"https://example.com" || -|'----------------------'| -| ______________________ | -|| || -|| Welcome! || -|| || -|| || -|| .----------------. || -|| | username | || -|| '----------------' || -|| .----------------. || -|| |"*******" | || -|| '----------------' || -|| || -|| .----------------. || -|| | "Sign-up" | || -|| '----------------' || -|| || -|+----------------------+| -.------------------------. -``` - -For more examples, check out the [typograms documentation](https://google.github.io/typograms/#examples). diff --git a/_posts/2024-05-01-tabs.md b/_posts/2024-05-01-tabs.md deleted file mode 100644 index f3d6e2d..0000000 --- a/_posts/2024-05-01-tabs.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -layout: post -title: a post with tabs -date: 2024-05-01 00:32:13 -description: this is what included tabs in a post could look like -tags: formatting code -categories: sample-posts -tabs: true ---- - -This is how a post with [tabs](https://github.com/Ovski4/jekyll-tabs) looks like. Note that the tabs could be used for different purposes, not only for code. - -## First tabs - -To add tabs, use the following syntax: - -{% raw %} - -```liquid -{% tabs group-name %} - -{% tab group-name tab-name-1 %} - -Content 1 - -{% endtab %} - -{% tab group-name tab-name-2 %} - -Content 2 - -{% endtab %} - -{% endtabs %} -``` - -{% endraw %} - -With this you can generate visualizations like: - -{% tabs log %} - -{% tab log php %} - -```php -var_dump('hello'); -``` - -{% endtab %} - -{% tab log js %} - -```javascript -console.log("hello"); -``` - -{% endtab %} - -{% tab log ruby %} - -```javascript -pputs 'hello' -``` - -{% endtab %} - -{% endtabs %} - -## Another example - -{% tabs data-struct %} - -{% tab data-struct yaml %} - -```yaml -hello: - - "whatsup" - - "hi" -``` - -{% endtab %} - -{% tab data-struct json %} - -```json -{ - "hello": ["whatsup", "hi"] -} -``` - -{% endtab %} - -{% endtabs %} - -## Tabs for something else - -{% tabs something-else %} - -{% tab something-else text %} - -Regular text - -{% endtab %} - -{% tab something-else quote %} - -> A quote - -{% endtab %} - -{% tab something-else list %} - -Hipster list - -- brunch -- fixie -- raybans -- messenger bag - -{% endtab %} - -{% endtabs %} diff --git a/_posts/2024-07-01-ht-startup-w-devops-p01.md b/_posts/2024-07-01-ht-startup-w-devops-p01.md new file mode 100644 index 0000000..508e1e4 --- /dev/null +++ b/_posts/2024-07-01-ht-startup-w-devops-p01.md @@ -0,0 +1,247 @@ +--- +layout: post +title: How-to Startup with DevOps from Day 0 – Part 1 +date: 2024-07-01 00:00:00 +description: | + This blog series aim to stop you delaying DevOps for your new startup. + In the first section, I'm going to talk about which DevOps services and tools we use at Xecuta and later a simple shared services account architecture that serve us in our early days. +tags: devops day0 aws terraform cdk aws-cdk +categories: > + startup +featured: true +mermaid: + enabled: true + zoomable: true +images: + compare: false + slider: true +--- + +# Foreword + +Perhaps it's the banking industry in which I started my IT career, but I've been obsessed with high speed and high quality software delivery ever since I took up platform engineering activities. + +Like at any startup, there are few people writing code, and it may be OK for some to leave software delivery disorganized. Not for us. + +We build multiple SaaS for businesses at [Xecuta](https://www.xecuta.co.uk) and it was obvious from day 0 that we had to set our solid architecture principles. + +It may be our early days, but our architecture principles have already given us the confidence in managing AWS resources effectively. + +In the first part of this series, I'll talk about our architecture principles and our design thinking which led us to organize our AWS environments and choose tools and services. + +## Xecuta's Architecture Principles + +Here's our 10 architecture principles that we agreed before we wrote our first line of code. + +1. Build cloud-native and serverless architectures, because we want maximum agility and minimum OpEx from day 0 with a near-linear trajectory for OpEx:Revenue ratio at short-to-medium long term. +2. Build services powered by Amazon Web Services (AWS), because they provide the best public cloud services around cloud-native and serverless architectures. +3. Organize our AWS environment using AWS Organizations and adopt AWS recommended [Basic Organization with infrastructure services](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/basic-organization.html#basic-organization-with-infrastructure-services) pattern +4. Use infrastructure-as-code for not only anything-on-cloud, but also to provision and manage + +- AWS accounts +- Git repositories +- CI/CD pipelines + +5. Security from day 0 + - Use SSO to access anything + - Use free or low-cost security services where possible +6. Use Open Source Software from day 0 +7. KISS (Keept It Simple, Stupid) +8. Adopt [The Twelve-Factor App](https://12factor.net/) methodology +9. Continuous Delivery from day 0 + - Use Static Code Analysis from day 0 + - Adopt [trunk-based development](https://trunkbaseddevelopment.com/) with branch-to-release strategy + - Multi git-repo strategy with isolated and independent CI/CD pipelines + - Re-build and re-deploy untouched code every 3 months +10. Build once deploy many with immutable build artefacts + - Use conventional commits at all times + - Use automation for semantic versioning and generating CHANGELOG + - Use package managers like npm or pip to manage code dependencies + +> Re: #3: You may want to look at [Basic organization with CI/CD as a separate function](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/basic-organization.html#basic-organization-with-cicd-as-a-separate-function) as well, but we decided to make Infrastructure OU enclose Deployments OU for simplicity. + +## How it's going so far + +At the time of writing, Xecuta has: + +- 15 AWS Accounts +- 30+ Git repositories, which also means + - 30+ Build jobs + - 30+ CI/CD pipelines + - 30+ On-Demand Deploy pipelines +- 2 separate multi-tenant SaaS offerings + - 3 environments for each + - Multiple SaaS customers for each +- Code Quality from day 0 + - Static Code Analysis with at least 80% Code Coverage, we pay €11/month + - OSS Vulnerabilities and OWASP 10 security scanning + - Policy-as-code for infrastructure-as-code +- 7,000+ lines of all code + +> We are just 1 full-time and 1 part-time developers \ +> AND AWS bill for **non-workload OUs** last month was only **$19.90** + +--- + +## Plan from Day 0 + +First, let's talk about how we organize our AWS accounts and resources. + +Assume we have a single AWS account, which becomes our AWS Organizations management account and we configure our IAM Identity Center to enable SSO. + +With respect to our principles #3 and #4, we want all organization OUs and member accounts to be managed by infrastructure-as-code. + +For this purpose, we have 2 single infrastructure-as-code Git repositories: + +- AWS Accounts Management +- Git repositories Management + +Our system administrators should be able to apply infrastructure-as-code changes from their local workstations, which will be authorized by temporary credentials issued by SSO (IAM Identity Center). + +```mermaid +flowchart TD + A["Git Repositories Management"]:::mgmt + B["AWS Accounts Management"]:::mgmt + subgraph Projects ["Projects"] + subgraph SharedServices + Projects_A["Shared Services"]:::ss + end + subgraph Workloads + direction LR + Projects_B["SaaS 1"]:::wl + Projects_C["SaaS 2"]:::wl + Projects_D["Core Service 1"]:::wl + end + end + A -- manage Git repo, branch policies, pipelines etc. --> Projects + B -- manage OUs, SCP, permission sets, member accounts etc. --> Projects + classDef ss fill:#33cc33, stroke:#303; + classDef wl fill:#ff3399, color: #fff, stroke:#303; + classDef mgmt fill:#aa0000, color: #fff; +``` + +I leave "Shared Services" to Part 2 of the series, as I plan to get into a lower level with more code. + +For the time being, let's assume we have a Shared Services account, it has the basic architecture set up and it provides some level of build and deployment capabilities. + +--- + +## Workload Infra Base + +Our design thinking on how we should organize our AWS resources led us to several questions, such as: + +- If a KMS key is used to encrypt and decrypt messages across all SQS queues in an AWS account, where should the key be maintained and who should maintain it +- There may be some AWS services like VPCs that our developers can be hands-off and we may want to restrict their maintenance to a smaller set of people, such as DevOps engineers only +- We must avoid cyclic dependencies and how can we control this in an ecosystem with many microservices +- We may want to keep the number of dependencies between microservices at a minimum so they continue to be easily disposable + +**Workload Infra Base** is our answer to this problem. + +A workload can be either a SaaS or a core service. A core service, such as CRM or Invoicing, is part of the company's platform, which serves all SaaS offered by the company. + +A component represents a microservice, or a miniservice, in which we manage only the **compute** resources, gateways and event mappings. Anything else is managed in Workload Infra Base, which can be one or more infrastructure-as-code repositories. + +For example, if we think of a typical AWS serverless application: + +- Infra Base manages Route 53 zone, ACM certificate, KMS key, all IAM roles including Lambda function execution roles, DynamoDB tables, SQS queues, S3 buckets, EventBridge Bus, Pipe etc +- The component manages the API Gateway and Lambda function. It imports / references ARNs of IAM roles, DynamoDB tables, SQS queues, S3 buckets etc. so it can define event mappings and add IAM policies for its implicit resources to access the _referenced_ AWS resources + +```mermaid +flowchart TD + subgraph subGraph0["Workload 1"] + direction BT + A["Infra Base"]:::base + B["Component 1"]:::cmp + C["Component 2"]:::cmp + D["Component 3"]:::cmp + end + B -. imports from .-> A + C -. imports from .-> A + D -. imports from .-> A +classDef base fill:#f96, stroke:#303; +classDef cmp color:#fff, fill:#b509ac, stroke:#303; +``` + +Assume we have a CRM system, in which Customer Service exposes an API for our web apps as well as backends of SaaS applications to get customer details. Hence, we want our Components to import resources from other components, even from those outside their own workloads, too. + +In another scenario, we may want to have a centralised Email microservice in our Core Services, and we'd like it to use SES identity domain, which is environment-agnostic therefore managed outside our workloads, in our Shared Services. + +In short, resources can be both intra-workload and inter-workload dependencies. + +```mermaid +flowchart TD + subgraph SGA2["Shared Services"] + C["Shared Services Infra Base"]:::base + end + subgraph SGA3["SaaS 1"] + direction LR + D["SaaS 1 Infra Base"]:::base + E["SaaS 1 Component 1"]:::cmp-. imports from .-> D + F["SaaS 1 Component 2"]:::cmp-. imports from .-> D + G["SaaS 1 Component 3"]:::cmp-. imports from .-> D + end + subgraph SGA4["Core Services"] + M["Core Services Infra Base"]:::base + N["Email Service"]:::cmp-. imports from .-> M + end + subgraph SGA5["CRM"] + K["CRM Infra Base"]:::base + L["Customer Service"]:::cmp-. imports from .-> K + end + E -. imports from .-> G & L + F -. imports from .-> N + N -. imports from .-> C +classDef base fill:#f96, stroke:#303; +classDef cmp color:#fff, fill:#b509ac, stroke:#303; +``` + +--- + +## Inter-Workload and Intra-Workload Resource Dependencies + +Terraform has quickly become the de-facto in infrastructure-as-code but it does not fill the gap between _infrastructure_ and _application code_, and that's expected, because it's not designed for software development. + +We can use AWS CDK as the singular approach to implement the infra base and components. Since AWS CDK creates CloudFormation stacks, it is possible to import & export resources between CloudFormation stacks, exporting from infra base's stacks and importing into components' stacks. + +Whilst this approach has its many pros, there are some important drawbacks of using AWS CDK from our perspective: + +1. Import & Export functionality in CloudFormation creates physical dependencies between CloudFormation stacks, and this may cause human interventions during major refactoring activities. Imagine logging into prod environment and deleting CloudFormation stacks manually. That's not going to work for us. +2. Cloud Development Kits like AWS CDK have brought the power of programming languages into infrastructure-as-code, enabling full stack engineering and rapid software development. Enterprises can produce reusable and modular CDK modules as `npm`, `pip`, or `go` packages, but there aren't many reusable CDK modules available in the wider community, whereas there are many production-ready modules available in Terraform today. +3. This is my personal opinion and I'm sure many of you will disagree with this, but Id don't buy into using programming languages for infrastructure-as-code. Although I've been using AWS CDK for my other projects lately, I'm still an advocate of using more limited and strict languages like YAML for infrastructure-as-code. I believe "The best code is no code at all" is true for infrastructure-as-code. Even the simplest programming language brings some complexity overhead; you need more knowledge to write good code in a programming language and you also need to perform maintenance for runtime environment upgrades. With HCL or YAML, there is not much of a major room for any runtime upgrades or weird runtime errors or any unintended behaviours. + +Third is a personal opinion. We could have lived with the first drawback, but the second one is the deal breaker. We're quite limited on resources (people and time); we can't maintain 1000s of lines of infrastructure-as-code to reinvent the wheel. + +An alternative could be [CDK for Terraform](https://developer.hashicorp.com/terraform/cdktf), but we are not comfortable with living on the cutting edge; as CDKTF "may still have breaking changes before its 1.0 release". + +We could also look into [Pulumi](https://www.pulumi.com/docs/concepts/vs/terraform/). Its features appear to be very promising, but Terraform's de-facto position within the wider community, was the tiebreaker for us. Limitless reusable modules, and not to mention our existing Terraform knowledge. + +--- + +Obviously, Terraform would not be good enough on its own for software development and testing on our local workstations, so we started experimenting with a hybrid-solution to get the best out of two different worlds: + +- We use Terraform to build and manage our workloads' infra base +- We use AWS SAM to **build and package but _not to deploy_** our serverless applications +- We wrap SAM projects into isolated Terraform states, which have only one Terraform resource, and that is an [`aws_cloudformation_stack`](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudformation_stack) +- We use [`terraform_remote_state`](https://developer.hashicorp.com/terraform/language/state/remote-state-data) to access workload infra base outputs and pass their values to the underlying CloudFormation stack through CloudFormation parameters + + + {% include figure.liquid path="assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-01.png" class="img-fluid rounded z-depth-1" zoomable=true %} + {% include figure.liquid path="assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-02.png" class="img-fluid rounded z-depth-1" zoomable=true %} + +
+ Swipe left to see how our pipelines work in our hybrid solution. +
+ +Thanks to trunk based development, strict conventional commits and automated semantic versioning, our builds produce immutable builds that we build once and deploy many. CD pipelines understand the target environment from the artefact version and perform Terraform plan & apply, which actually does CloudFormation stack create/update in the background. + +Finally, if the Workload Infra Base gets very big, we can split into 2 or more repositories and orchestrate their deployments using [Terragrunt](https://terragrunt.gruntwork.io/). + +We were quite happy with our experiment and decided to follow this pattern in building SaaS at Xecuta. I understand our approach may seem too complex or unnecessary for some, but again, best out of two worlds! + +- Thanks to Terraform, we are able to reuse terraform modules produced by the community and this keep LoC of our infrastructure-as-code low +- Thanks to AWS SAM, we can develop and test locally +- And we can manage inter-workload and intra-workload dependencies in a consistent and reliable manner + +I hope you enjoyed my first blog post about Workload Infra Base pattern with hybrid implementation using AWs SAM and Terraform. + +Part 2 of this series will continue with which SCM and Orchestration tool(s) we opted to use and how we built our Shared Services initially. Until then, ciao! diff --git a/_posts/2024-07-07-ht-startup-w-devops-p02.md b/_posts/2024-07-07-ht-startup-w-devops-p02.md new file mode 100644 index 0000000..a238522 --- /dev/null +++ b/_posts/2024-07-07-ht-startup-w-devops-p02.md @@ -0,0 +1,33 @@ +--- +layout: post +title: How-to Startup with DevOps from Day 0 – Part 2 +date: 2024-07-07 00:00:00 +description: | + This blog series aim to stop you delaying DevOps for your new startup. + In the first section, I'm going to talk about which DevOps services and tools we use at Xecuta and later a simple shared services account architecture that serve us in our early days. +tags: devops day0 aws terraform azure-devops +categories: > + startup +featured: true +mermaid: + enabled: true + zoomable: true +--- + +# Shared Services + +Our Shared Services may initially have: + +- Route 53 Public Zone for the company domain apex (i.e. example.com) +- SES Domain Identities (i.e. example.com and nonprod.example.com) +- If there will be build agents: + - A VPC with NAT(s) + - Pipelines that will be triggered manually or periodically to build and rotate build agents + - Build agents(if any) +- Build artifact repositories for anything that runs in our all accounts. These can be any one or more from: + - S3 Bucket(s) + - AWS CodeArtifact + - A Custom vendor-provided system like Sonatype Nexus + - ECR repositories for any Docker images + +> As our build artifacts will be immutable and environment-agnostic, our deployment processes should retrieve build artifacts from the _Shared Services_ AWS account and deploy them to the target environment, which will be a workload AWS account. diff --git a/_projects/1_project.md b/_projects/1_project.md deleted file mode 100644 index ac87b64..0000000 --- a/_projects/1_project.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: page -title: project 1 -description: with background image -img: assets/img/12.jpg -importance: 1 -category: work -related_publications: true ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images, even citations {% cite einstein1950meaning %}. -Say you wanted to write a bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/2_project.md b/_projects/2_project.md deleted file mode 100644 index 25de228..0000000 --- a/_projects/2_project.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: page -title: project 2 -description: a project with a background image and giscus comments -img: assets/img/3.jpg -importance: 2 -category: work -giscus_comments: true ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/3_project.md b/_projects/3_project.md deleted file mode 100644 index 4f981b4..0000000 --- a/_projects/3_project.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: page -title: project 3 with very long name -description: a project that redirects to another website -img: assets/img/7.jpg -redirect: https://unsplash.com -importance: 3 -category: work ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/4_project.md b/_projects/4_project.md deleted file mode 100644 index 1144b9c..0000000 --- a/_projects/4_project.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: page -title: project 4 -description: another without an image -img: -importance: 3 -category: fun ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/5_project.md b/_projects/5_project.md deleted file mode 100644 index 35c8e63..0000000 --- a/_projects/5_project.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: page -title: project 5 -description: a project with a background image -img: assets/img/1.jpg -importance: 3 -category: fun ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/6_project.md b/_projects/6_project.md deleted file mode 100644 index 36ea874..0000000 --- a/_projects/6_project.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: page -title: project 6 -description: a project with no image -img: -importance: 4 -category: fun ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/7_project.md b/_projects/7_project.md deleted file mode 100644 index f9522ce..0000000 --- a/_projects/7_project.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: page -title: project 7 -description: with background image -img: assets/img/4.jpg -importance: 1 -category: work -related_publications: true ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images, even citations {% cite einstein1950meaning %}. -Say you wanted to write a bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/8_project.md b/_projects/8_project.md deleted file mode 100644 index c607901..0000000 --- a/_projects/8_project.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: page -title: project 8 -description: an other project with a background image and giscus comments -img: assets/img/9.jpg -importance: 2 -category: work -giscus_comments: true ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_projects/9_project.md b/_projects/9_project.md deleted file mode 100644 index 7345bbb..0000000 --- a/_projects/9_project.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: page -title: project 9 -description: another project with an image 🎉 -img: assets/img/6.jpg -importance: 4 -category: fun ---- - -Every project has a beautiful feature showcase page. -It's easy to include images in a flexible 3-column grid format. -Make your photos 1/3, 2/3, or full width. - -To give your project a background in the portfolio page, just add the img tag to the front matter like so: - - --- - layout: page - title: project - description: a project with a background image - img: /assets/img/12.jpg - --- - -
-
- {% include figure.liquid loading="eager" path="assets/img/1.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/3.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- Caption photos easily. On the left, a road goes through a tunnel. Middle, leaves artistically fall in a hipster photoshoot. Right, in another hipster photoshoot, a lumberjack grasps a handful of pine needles. -
-
-
- {% include figure.liquid loading="eager" path="assets/img/5.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- This image can also have a caption. It's like magic. -
- -You can also put regular text between your rows of images. -Say you wanted to write a little bit about your project before you posted the rest of the images. -You describe how you toiled, sweated, _bled_ for your project, and then... you reveal its glory in the next row of images. - -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-
- You can also have artistically styled 2/3 + 1/3 images, like these. -
- -The code is simple. -Just wrap your images with `
` and place them inside `
` (read more about the Bootstrap Grid system). -To make images responsive, add `img-fluid` class to each; for rounded corners and shadows use `rounded` and `z-depth-1` classes. -Here's the code for the last row of images above: - -{% raw %} - -```html -
-
- {% include figure.liquid path="assets/img/6.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
- {% include figure.liquid path="assets/img/11.jpg" title="example image" class="img-fluid rounded z-depth-1" %} -
-
-``` - -{% endraw %} diff --git a/_sass/_base.scss b/_sass/_base.scss index 90bdeb0..cd5541e 100644 --- a/_sass/_base.scss +++ b/_sass/_base.scss @@ -17,6 +17,10 @@ li, span, strong { color: var(--global-text-color); + .keyword { + color: var(--global-keyword-fg-color); + background: var(--global-keyword-bg-color); + } } hr { diff --git a/_sass/_cv.scss b/_sass/_cv.scss index d733ba3..ae5d852 100644 --- a/_sass/_cv.scss +++ b/_sass/_cv.scss @@ -106,7 +106,7 @@ div.list-group { flex-wrap: wrap; flex-direction: column; align-items: flex-start; - margin-bottom: 2rem; + margin-bottom: 1rem; } td.list-group-category { diff --git a/_sass/_themes.scss b/_sass/_themes.scss index 7982cec..7b8b6a2 100644 --- a/_sass/_themes.scss +++ b/_sass/_themes.scss @@ -7,8 +7,8 @@ --global-code-bg-color: #{$code-bg-color-light}; --global-text-color: #{$black-color}; --global-text-color-light: #{$grey-color}; - --global-theme-color: #{$purple-color}; - --global-hover-color: #{$purple-color}; + --global-theme-color: #{$blue-color-dark}; + --global-hover-color: #{$blue-color-dark}; --global-hover-text-color: #{$white-color}; --global-footer-bg-color: #{$grey-color-dark}; --global-footer-text-color: #{$grey-color-light}; @@ -21,6 +21,8 @@ --global-back-to-top-text-color: #{$white-color}; --global-newsletter-bg-color: #{$white-color}; --global-newsletter-text-color: #{$black-color}; + --global-keyword-bg-color: #{$keyword-bg-color-light}; + --global-keyword-fg-color: #{$keyword-fg-color-light}; --global-tip-block: #42b983; --global-tip-block-bg: #e2f5ec; @@ -85,6 +87,8 @@ html[data-theme="dark"] { --global-back-to-top-text-color: #{$black-color}; --global-newsletter-bg-color: #{$grey-color-light}; --global-newsletter-text-color: #{$grey-color-dark}; + --global-keyword-bg-color: #{$keyword-bg-color-dark}; + --global-keyword-fg-color: #{$keyword-fg-color-dark}; --global-tip-block: #42b983; --global-tip-block-bg: #e2f5ec; diff --git a/_sass/_variables.scss b/_sass/_variables.scss index 85b6c72..c527757 100644 --- a/_sass/_variables.scss +++ b/_sass/_variables.scss @@ -32,9 +32,14 @@ $black-color: #000000 !default; // Theme colors -$code-bg-color-light: rgba($purple-color, 0.05); +$code-bg-color-light: rgba($blue-color, 0.05); $code-bg-color-dark: #2c3237 !default; +$keyword-bg-color-light: #f1f1f1; +$keyword-fg-color-light: #555; +$keyword-bg-color-dark: lighten($grey-color-dark, 10%); +$keyword-fg-color-dark: $cyan-color; + // Font awesome location $fa-font-path: "../webfonts"; diff --git a/assets/audio/epicaly-short-113909.mp3 b/assets/audio/epicaly-short-113909.mp3 deleted file mode 100644 index 5fd64b9..0000000 Binary files a/assets/audio/epicaly-short-113909.mp3 and /dev/null differ diff --git a/assets/bibliography/2018-12-22-distill.bib b/assets/bibliography/2018-12-22-distill.bib deleted file mode 100644 index 2b06f3c..0000000 --- a/assets/bibliography/2018-12-22-distill.bib +++ /dev/null @@ -1,7 +0,0 @@ -@article{gregor2015draw, - title={DRAW: A recurrent neural network for image generation}, - author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan}, - journal={arXiv preprint, arXiv:1502.04623}, - year={2015}, - url={https://arxiv.org/pdf/1502.04623.pdf} -} diff --git a/assets/html/relativity.html b/assets/html/relativity.html deleted file mode 100644 index 7d3472a..0000000 --- a/assets/html/relativity.html +++ /dev/null @@ -1,10 +0,0 @@ - - -
-

Relativity: the Special and General Theory

-
Albert Einstein
-
- Insert HTML document here. -
- - diff --git a/assets/img/1.jpg b/assets/img/1.jpg deleted file mode 100644 index 1f2eb4c..0000000 Binary files a/assets/img/1.jpg and /dev/null differ diff --git a/assets/img/10.jpg b/assets/img/10.jpg deleted file mode 100644 index e9958d4..0000000 Binary files a/assets/img/10.jpg and /dev/null differ diff --git a/assets/img/11.jpg b/assets/img/11.jpg deleted file mode 100644 index 9db0d27..0000000 Binary files a/assets/img/11.jpg and /dev/null differ diff --git a/assets/img/12.jpg b/assets/img/12.jpg deleted file mode 100644 index e343b39..0000000 Binary files a/assets/img/12.jpg and /dev/null differ diff --git a/assets/img/2.jpg b/assets/img/2.jpg deleted file mode 100644 index 4f663e8..0000000 Binary files a/assets/img/2.jpg and /dev/null differ diff --git a/assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-01.png b/assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-01.png new file mode 100644 index 0000000..37995c4 Binary files /dev/null and b/assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-01.png differ diff --git a/assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-02.png b/assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-02.png new file mode 100644 index 0000000..eac4f67 Binary files /dev/null and b/assets/img/2024-07-01-how-to-startup-with-devops-part-1/diagram-02.png differ diff --git a/assets/img/3.jpg b/assets/img/3.jpg deleted file mode 100644 index 2cc28bd..0000000 Binary files a/assets/img/3.jpg and /dev/null differ diff --git a/assets/img/4.jpg b/assets/img/4.jpg deleted file mode 100644 index 746b206..0000000 Binary files a/assets/img/4.jpg and /dev/null differ diff --git a/assets/img/5.jpg b/assets/img/5.jpg deleted file mode 100644 index 80a4df3..0000000 Binary files a/assets/img/5.jpg and /dev/null differ diff --git a/assets/img/6.jpg b/assets/img/6.jpg deleted file mode 100644 index 92317be..0000000 Binary files a/assets/img/6.jpg and /dev/null differ diff --git a/assets/img/7.jpg b/assets/img/7.jpg deleted file mode 100644 index f581ccd..0000000 Binary files a/assets/img/7.jpg and /dev/null differ diff --git a/assets/img/8.jpg b/assets/img/8.jpg deleted file mode 100644 index 498432a..0000000 Binary files a/assets/img/8.jpg and /dev/null differ diff --git a/assets/img/9.jpg b/assets/img/9.jpg deleted file mode 100644 index d5b7972..0000000 Binary files a/assets/img/9.jpg and /dev/null differ diff --git a/assets/img/prof_pic.jpg b/assets/img/prof_pic.jpg deleted file mode 100644 index 46bcf9c..0000000 Binary files a/assets/img/prof_pic.jpg and /dev/null differ diff --git a/assets/img/prof_pic.png b/assets/img/prof_pic.png new file mode 100755 index 0000000..181a30f Binary files /dev/null and b/assets/img/prof_pic.png differ diff --git a/assets/img/prof_pic_color.png b/assets/img/prof_pic_color.png deleted file mode 100644 index 4a33911..0000000 Binary files a/assets/img/prof_pic_color.png and /dev/null differ diff --git a/assets/img/publication_preview/brownian-motion.gif b/assets/img/publication_preview/brownian-motion.gif deleted file mode 100644 index e4bae8f..0000000 Binary files a/assets/img/publication_preview/brownian-motion.gif and /dev/null differ diff --git a/assets/img/publication_preview/wave-mechanics.gif b/assets/img/publication_preview/wave-mechanics.gif deleted file mode 100644 index 8d7f502..0000000 Binary files a/assets/img/publication_preview/wave-mechanics.gif and /dev/null differ diff --git a/assets/json/resume.json b/assets/json/resume.json index 5ab5eca..78b6f3e 100644 --- a/assets/json/resume.json +++ b/assets/json/resume.json @@ -1,157 +1,423 @@ { + "$schema": "https://raw.githubusercontent.com/reorx/jsoncv/master/schema/jsoncv.schema.json", "basics": { - "name": "Albert Einstein", - "label": "Scientist", - "image": "", - "email": "albert@einstein.de", - "phone": "(912) 123-4567", - "url": "https://alshedivat.github.io/al-folio/", - "summary": "A German-born theoretical physicist, widely ranked among the greatest and most influential scientists of all time", + "name": "Fethi Ozdol", + "label": "AWS Solutions Architect", "location": { - "address": "2712 Broadway St", - "postalCode": "CA 94115", - "city": "San Francisco", - "countryCode": "US", - "region": "California" + "address": "", + "postalCode": "", + "city": "London", + "countryCode": "UK" }, + "image": "", + "email": "", + "url": "https://thisismypattern.com", "profiles": [ { - "network": "Twitter", - "username": "AlbertEinstein", - "url": "https://twitter.com/AlbertEinstein" + "network": "LinkedIn", + "username": "", + "url": "https://www.linkedin.com/in/mfethio/" } - ] + ], + "summary": "An AWS Solutions Architect with 15 years cross-functional experience across multiple industries. Outside IR35 contracts only. No visa or work permit required in UK and EU." }, "work": [ { - "name": "Institute for Advanced Study, Princeton University", - "position": "Professor of Theoretical Physics", - "url": "https://example.com", - "startDate": "1933-01-01", - "endDate": "1955-01-01", - "summary": "Teaching at Palmer Physical Laboratory (now 302 Frist Campus Center). While not a professor at Princeton, I associated with the physics professors and continued to give lectures on campus.", - "highlights": ["Relativity"] - } - ], - "volunteer": [ - { - "organization": "People's Climate March", - "location": "Zurich, Switzerland", - "position": "Lead Organizer", - "url": "https://example.com", - "startDate": "2014-04-01", - "endDate": "2015-07-01", - "summary": "Lead organizer for the New York City branch of the People's Climate March, the largest climate march in history.", - "highlights": ["Awarded 'Climate Hero' award by Greenpeace for my efforts organizing the march.", "Men of the year 2014 by Time magazine"] + "name": "Xecuta", + "location": "London, United Kingdom", + "position": "Director", + "url": "https://www.xecuta.co.uk", + "startDate": "2024-02-01", + "endDate": "", + "summary": "I lead the development of the company's SaaS products, providing architecture, design, and implementation expertise." + }, + { + "name": "eCreation Media Technology", + "location": "London, United Kingdom", + "position": "Solutions Architect", + "url": "https://www.ecreationmedia.tv", + "startDate": "2024-01-01", + "endDate": "", + "summary": "Technology and AWS cloud architecture consultancy and solutions to multiple clients." + }, + { + "name": "Synapx", + "location": "London, United Kingdom", + "position": "Director, Cloud Engineer", + "url": "https://www.synapx.co.uk", + "startDate": "2022-06-01", + "endDate": "2023-12-01", + "summary": "Built the company's device management, security and compliance system using Microsoft Azure AD, Microsoft Intune, Microsoft Defender, and Microsoft O365. Google Chrome Browser Management using Google Workspace and Cloud Identity. Defined company standards and naming conventions for the company's tech inventory and environment management. Took up outside IR35 contract roles through Synapx Ltd." + }, + { + "name": "Accenture", + "location": "London, United Kingdom", + "position": "Tech Arch Delivery Associate Manager", + "url": "https://www.accenture.com/gb-en", + "startDate": "2019-07-01", + "endDate": "2022-06-01", + "summary": "AWS Solutions Architect and Cloud Engineer in Accenture AWS Business Group (AABG) UK and Ireland.", + "highlights": [ + "Became AWS Certified Solutions Architect – Associate", + "Became AWS Certified Cloud Practitioner", + "Most Innovative Team in UK to participate at Accenture's Global V360 Awards 2020" + ] + }, + { + "name": "Accenture", + "location": "London, United Kingdom", + "position": "Advanced Application Engineering Specialist", + "url": "https://www.accenture.com/gb-en", + "startDate": "2015-09-01", + "endDate": "2019-06-01", + "summary": "Team Lead in DevOps UK and Ireland group.", + "highlights": [ + "Became Google Cloud Certified Professional Cloud Architect", + "Obtained Technology Architect Associate in Accenture MTA programme" + ] + }, + { + "name": "Garanti BBVA Teknoloji", + "description": "Technology subsidiary of Garanti BBVA, Turkey's largest private retail bank", + "location": "Istanbul, Türkiye", + "position": "Development Architecture Specialist", + "url": "https://www.garantibbvateknoloji.com.tr/", + "startDate": "2014-01-01", + "endDate": "2015-08-01", + "summary": "Responsible for development standards, environments, and tooling for millions of lines of code in Java, C#, COBOL, PL/I." + }, + { + "name": "Garanti BBVA Teknoloji", + "description": "Technology subsidiary of Garanti BBVA, Turkey's largest private retail bank", + "location": "Istanbul, Türkiye", + "position": "Senior Software Engineer", + "url": "https://www.garantibbvateknoloji.com.tr/", + "startDate": "2009-11-01", + "endDate": "2013-04-01", + "summary": "Full stack developer for CRM, Sales, and Marketing modules for 6 million active retail and commercial banking customers." } ], "education": [ { - "institution": "University of Zurich, Zurich, Switzerland", - "location": "Zurich, Switzerland", - "url": "https://www.uzh.ch/", - "area": "Software Development", - "studyType": "PhD", - "startDate": "1905-01-01", - "endDate": "1905-01-01", - "score": "10", - "courses": ["Theory of Relativity"] + "institution": "Sabanci University, Türkiye", + "location": "Istanbul, Türkiye", + "url": "https://www.sabanciuniv.edu/en", + "area": "Computer Science and Engineering", + "studyType": "Bachelor of Science", + "startDate": "2004-09-01", + "endDate": "2009-02-01" } ], - "awards": [ + "projects": [ { - "title": "Nobel Prize in Physics", - "date": "1921-11-01", - "awarder": "Royal Swedish Academy of Sciences", - "url": "https://www.nobelprize.org/prizes/physics/1921/einstein/biographical/", - "summary": "The Nobel Prizes are five separate prizes that, according to Alfred Nobel's will of 1895, are awarded to 'those who, during the preceding year, have conferred the greatest benefit to humankind.'" - } - ], - "certificates": [ + "name": "RPA Farm | Xecuta", + "description": "API-driven B2B SaaS to host and execute RPA with pay-per-use pricing model at 1ms granularity", + "url": "https://rpafarm.com", + "keywords": [ + "Amazon CloudFront", + "Amazon API Gateway", + "Lambda", + "TypeScript", + "Node.JS", + "Python", + "Amazon DynamoDB", + "Amazon SQS", + "Amazon EventBridge", + "Amazon Cognito", + "Amazon CloudWatch", + "Terraform", + "Azure DevOps", + "SonarCloud", + "checkov.io" + ], + "startDate": "2024-02-01", + "endDate": "" + }, + { + "name": "Document Analysis Service | Xecuta", + "description": "API-Driven B2B SaaS to extract text information from documents and images with pay-per-use pricing model at 1 page granularity", + "url": "https://www.xecuta.co.uk", + "keywords": [ + "Amazon Textract", + "Google Cloud DocumentAI", + "Amazon CloudFront", + "Amazon API Gateway", + "Lambda", + "TypeScript", + "Node.JS", + "Python", + "Amazon DynamoDB", + "Amazon SQS", + "Amazon EventBridge", + "Amazon Cognito", + "Amazon CloudWatch", + "Terraform", + "Azure DevOps", + "SonarCloud", + "checkov.io" + ], + "startDate": "2024-02-01", + "endDate": "" + }, + { + "name": "Public Health | Accenture", + "description": "As Platform Engineering Lead, managed a cloud engineering team of 5 and coordinated 10s of releases and provided 24/7 BAU support for supplying COVID-19 tests to care homes.", + "url": "https://www.accenture.com/gb-en", + "keywords": [ + "Amazon EC2", + "AWS EKS", + "Amazon CloudFront", + "Amazon API Gateway", + "Lambda", + "TypeScript", + "Amazon DynamoDB", + "Amazon SQS", + "Amazon Cognito", + "Amazon CloudWatch", + "Docker", + "Kubernetes", + "Terraform", + "Azure DevOps", + "Terragrunt", + "cdktf", + "SonarQube", + "checkov.io" + ], + "startDate": "2021-06-01", + "endDate": "2021-10-01" + }, { - "name": "Machine Learning", - "date": "2018-01-01", - "issuer": "Stanford University", - "url": "https://example.com", - "icon": "fa-solid fa-location-dot" + "name": "Global retail banking and financial services company | Accenture", + "description": "As DevOps Lead, Designed software delivery lifecycle processes, infrastructure-as-code, and CI/CD pipelines for one-click delivery of a multi-region application architecture to migrate their contact centre to AWS.", + "url": "https://www.accenture.com/gb-en", + "keywords": [ + "Amazon Connect", + "Amazon Lex", + "Lambda", + "Node.JS", + "Amazon DynamoDB", + "Amazon SQS", + "Amazon SNS", + "Amazon CloudWatch", + "Terraform", + "GitHub", + "GitHub Actions" + ], + "startDate": "2021-10-01", + "endDate": "2022-01-01" }, { - "name": "Quantum Computing", - "date": "2018-01-01", - "issuer": "Stanford University", - "url": "https://example.com", - "icon": "fa-solid fa-tag" + "name": "UK Top-5 retail group | Accenture", + "description": "As Solutions Architect & DevOps Lead, cloud migration of 5 applications from on-premises data centre to AWS.", + "url": "https://www.accenture.com/gb-en", + "keywords": ["Amazon EC2", "Amazon RDS for PostgreSQL", "Cloud Endure", "GitHub", "Jenkins", "AWS CloudFormation", "AWS EC2 Image Builder"], + "startDate": "2021-06-01", + "endDate": "2021-10-01" }, { - "name": "Quantum Information", - "date": "2018-01-01", - "issuer": "Stanford University", - "url": "https://example.com", - "icon": "fa-solid fa-envelope" + "name": "Public Health | Accenture", + "description": "As Solutions Architect & DevOps Lead, helped to save lives with a new COVID-19 rapid test finder map solution for the public. The solution has a state-of-art cloud native architecture with CI-CD pipelines fully implemented in AWS. First release in just 8 days and went live at a national scale in just 3 weeks.", + "url": "https://www.accenture.com/gb-en", + "keywords": [ + "Amazon CloudFront", + "Amazon API Gateway", + "AWS Lambda", + "Node.JS", + "Python", + "Amazon DynamoDB", + "Amazon SQS", + "Amazon EventBridge", + "Amazon Cognito", + "AWS CloudFormation", + "Amazon CloudWatch", + "AWS CodeCommit", + "AWS CodeBuild", + "AWS CodePipeline" + ], + "startDate": "2020-11-01", + "endDate": "2021-05-01" }, { - "name": "Quantum Cryptography", - "date": "2018-01-01", - "issuer": "Stanford University", - "url": "https://example.com", - "icon": "fa-solid fa-hashtag" + "name": "Internal shared services | Accenture", + "description": "As Lead Technical Architect, increased developer productivity by 50%, reduced time to market by 30% and reduced operational costs by 50%. Rearchitected the cloud architecture, upgraded the runtime environment from Docker Swarm to AWS EKS. 10s of containerised Java microservices, 600+ pods across 3 clusters. The solution served 100+ clients in many industries at 99.999% availability with all infrastructure and licensing costs at only $3k per month. Led the development team of 12 across 3 geographies, oversaw and guided their transformation into a multidisciplinary Agile team.", + "url": "https://www.accenture.com/gb-en", + "keywords": [ + "Amazon EC2", + "AWS EKS", + "DynamoDB", + "Aurora Serverless", + "ElastiCache", + "Application Load Balancer", + "Ambassador API Gateway", + "NGINX Ingress Controller", + "oauth2-proxy", + "FluentBit", + "AWS CloudFormation", + "Bitbucket", + "Jenkins", + "Docker", + "Packer", + "Prometheus", + "Grafana", + "SonarQube", + "Azure Active Directory", + "Cucumber", + "Selenium", + "Locust" + ], + "startDate": "2018-01-01", + "endDate": "2020-11-01" }, { - "name": "Quantum Communication", - "date": "2018-01-01", - "issuer": "Stanford University", - "url": "https://example.com", - "icon": "fa-solid fa-calendar" + "name": "Large multinational investment company | Accenture", + "description": "As DevOps Team Lead, reduced infrastructure costs by 40% and cut operational costs by 50% with a reusable and cloud agnostic solution for Micro Focus tools, which makes it possible to provision all environments and CD pipelines in less than a day.", + "url": "https://www.accenture.com/gb-en", + "keywords": ["Micro Focus Enterprise Server on Amazon EC2", "IBM DB2 on Amazon EC2", "Ansible", "Jenkins", "SonarQube", "ElasticSearch"], + "startDate": "2018-01-01", + "endDate": "2020-11-01" }, { - "name": "Quantum Teleportation", - "date": "2018-01-01", - "issuer": "Stanford University", - "url": "https://example.com", - "icon": "fa-solid fa-clipboard-check" + "name": "Accenture Post-Trade Processing (APTP) | Accenture", + "description": "As DevOps Team Lead, technology delivery and BAU support for multiple global financial services companies.", + "url": "https://www.accenture.com/us-en/services/capital-markets/post-trade-processing", + "startDate": "2015-09-01", + "endDate": "2017-12-01", + "keywords": ["Java", "Amazon EC2", "Amazon RDS for Oracle", "Amazon RDS for Microsoft SQL Server", "Chef", "Jenkins", "Nagios"] } ], - "publications": [ + "certificates": [ { - "name": "Zur Elektrody/namik bewegter Körper", - "publisher": "Annalen der Physik", - "releaseDate": "1905-06-30", - "url": "https://en.wikisource.org/wiki/Translation:On_the_Electrodynamics_of_Moving_Bodies", - "summary": "It concerned an interpretation of the Michelson–Morley experiment and the properties of light and time. Special relativity incorporates the principle that the speed of light is the same for all inertial observers regardless of the state of motion of the source." + "name": "AWS Certified Solutions Architect – Associate", + "date": "2022-05-16", + "issuer": "Amazon Web Services Training and Certification", + "url": "https://www.credly.com/badges/a8456429-4af8-4567-b96c-b2ab6783234b/public_url", + "icon": "fa-brands fa-aws" }, { - "name": "Über einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt", - "publisher": "Annalen der Physik", - "releaseDate": "1905-03-18", - "url": "https://de.wikisource.org/wiki/Über_einen_die_Erzeugung_und_Verwandlung_des_Lichtes_betreffenden_heuristischen_Gesichtspunkt", - "summary": "In the second paper, he applied the quantum theory to light to explain the photoelectric effect. In particular, he used the idea of light quanta (photons) to explain experimental results, but stressed the importance of the experimental results. The importance of his work on the photoelectric effect earned him the Nobel Prize in Physics in 1921." + "name": "AWS Certified Cloud Practitioner", + "date": "2021-08-28", + "issuer": "Amazon Web Services Training and Certification", + "url": "https://www.credly.com/badges/73ae53c6-4bc8-4e07-9712-b03d7158d404/public_url", + "icon": "fa-brands fa-aws" }, { - "name": "Die Grundlage der allgemeinen Relativitätstheorie", - "publisher": "Annalen der Physik", - "releaseDate": "1916-03-20", - "url": "https://de.wikisource.org/wiki/Die_Grundlage_der_allgemeinen_Relativitätstheorie", - "summary": "The publication of the theory of general relativity made him internationally famous. He was professor of physics at the universities of Zurich (1909–1911) and Prague (1911–1912), before he returned to ETH Zurich (1912–1914)." + "name": "Technology Architect Associate", + "date": "2017-01-01", + "issuer": "Accenture MTA programme", + "url": "", + "icon": "" + }, + { + "name": "ITIL Foundation v3", + "date": "2015-01-01", + "issuer": "AXELOS Global Best Practice", + "url": "", + "icon": "" + } + ], + "publications": [ + { + "name": "The Reflexive Campus: A Study of Dynamic Architecture in a Virtual World", + "publisher": "IEEE", + "releaseDate": "2009-10-06", + "url": "https://ieeexplore.ieee.org/document/5279692", + "summary": "This paper describes the creative as well as computational processes involved in the creation of a generative, emergent architectural construct destined to become the virtual campus of a real life university on a dedicated island in Second Life®." } ], "skills": [ { - "name": "Physics", - "level": "Master", + "name": "AWS", + "level": "", + "icon": "fa-solid fa-hashtag", + "keywords": [ + "IAM", + "S3", + "KMS", + "EFS", + "EC2", + " EC2 Image Builder", + "EBS", + "ELB", + "VPC", + "WAF", + "Transit Gateway", + "PrivateLink", + "VPN", + "CloudFront", + "API Gateway", + "AppSync", + "Route 53", + "Global Accelerator", + "Cognito", + "SQS", + "SNS", + "SES", + "EventBridge", + "Lambda", + "Secrets Manager", + "X-Ray", + "CloudTrail", + "CloudWatch", + "Config", + "Systems Manager", + "Trusted Advisor", + "GuardDuty", + "Kinesis", + "Athena", + "Glue", + "QuickSight", + "Textract", + "Amazon Connect" + ] + }, + { + "name": "DevOps", + "level": "", "icon": "fa-solid fa-hashtag", "keywords": [ - "Quantum Mechanics", - "Quantum Computing", - "Quantum Information", - "Quantum Cryptography", - "Quantum Communication", - "Quantum Teleportation" + "Terraform", + "Terragrunt", + "cdktf", + "AWS CDK", + "AWS CloudFormation", + "AWS CodeCommit", + "AWS CodeBuild", + "AWS CodePipeline", + "Azure DevOps", + "BitBucket", + "GitHub", + "Ansible", + "Chef" ] + }, + { + "name": "Database", + "level": "", + "icon": "fa-solid fa-hashtag", + "keywords": ["Amazon DynamoDB", "Amazon Aurora", "Amazon RDS", "ElastiCache", "MySQL", "Oracle", "Microsoft SQL Server", "IBM DB2"] + }, + { + "name": "Containerisation", + "level": "", + "icon": "fa-solid fa-hashtag", + "keywords": ["Fargate", "Docker", "Kubernetes", "AWS EKS", "AWS ECS", "Amazon Fargate"] + }, + { + "name": "Programming", + "level": "", + "icon": "fa-solid fa-hashtag", + "keywords": ["Node.js", "Python", "Golang", "COBOL", "PL/I", "Java"] + }, + { + "name": "Scripting", + "level": "", + "icon": "fa-solid fa-hashtag", + "keywords": ["Shell", "PowerShell"] } ], "languages": [ { - "language": "German", + "language": "Turkish", "fluency": "Native speaker", "icon": "" }, @@ -163,38 +429,17 @@ ], "interests": [ { - "name": "Physics", - "icon": "fa-solid fa-tag", - "keywords": [ - "Quantum Mechanics", - "Quantum Computing", - "Quantum Information", - "Quantum Cryptography", - "Quantum Communication", - "Quantum Teleportation" - ] - } - ], - "references": [ - { - "name": "Professor John Doe", - "icon": "fa-solid fa-laptop", - "reference": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam condimentum, diam quis convallis euismod, arcu mi ullamcorper lorem, a vestibulum nunc magna at sem. Sed in risus ac felis varius blandit. D" - }, - { - "name": "Professor John Doe", - "icon": "fa-solid fa-thumbtack", - "reference": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam condimentum, diam quis convallis euismod, arcu mi ullamcorper lorem, a vestibulum nunc magna at sem. Sed in risus ac felis varius blandit. D" + "name": "Music", + "icon": "fa-solid fa-guitar", + "keywords": ["Classical guitar"] } ], - "projects": [ - { - "name": "Quantum Computing", - "summary": "Quantum computing is the use of quantum-mechanical phenomena such as superposition and entanglement to perform computation. Computers that perform quantum computations are known as quantum computers.", - "highlights": ["Quantum Teleportation", "Quantum Cryptography"], - "startDate": "2018-01-01", - "endDate": "2018-01-01", - "url": "https://example.com" - } - ] + "awards": [], + "volunteer": [], + "references": [], + "meta": { + "canonical": "https://raw.githubusercontent.com/reorx/jsoncv/master/schema/jsoncv.schema.json", + "version": "v1.0.0", + "lastModified": "2024-06-28T19:00:00" + } } diff --git a/assets/json/table_data.json b/assets/json/table_data.json deleted file mode 100644 index a44a088..0000000 --- a/assets/json/table_data.json +++ /dev/null @@ -1,128 +0,0 @@ -[ - { - "id": 0, - "name": "Item 0", - "price": "$0", - "amount": 3 - }, - { - "id": 1, - "name": "Item 1", - "price": "$1", - "amount": 4 - }, - { - "id": 2, - "name": "Item 2", - "price": "$2", - "amount": 8 - }, - { - "id": 3, - "name": "Item 3", - "price": "$3", - "amount": 2 - }, - { - "id": 4, - "name": "Item 4", - "price": "$4", - "amount": 90 - }, - { - "id": 5, - "name": "Item 5", - "price": "$5", - "amount": 2 - }, - { - "id": 6, - "name": "Item 6", - "price": "$6", - "amount": 3 - }, - { - "id": 7, - "name": "Item 7", - "price": "$7", - "amount": 7 - }, - { - "id": 8, - "name": "Item 8", - "price": "$8", - "amount": 39 - }, - { - "id": 9, - "name": "Item 9", - "price": "$9", - "amount": 78 - }, - { - "id": 10, - "name": "Item 10", - "price": "$10", - "amount": 30 - }, - { - "id": 11, - "name": "Item 11", - "price": "$11", - "amount": 32 - }, - { - "id": 12, - "name": "Item 12", - "price": "$12", - "amount": 12 - }, - { - "id": 13, - "name": "Item 13", - "price": "$13", - "amount": 76 - }, - { - "id": 14, - "name": "Item 14", - "price": "$14", - "amount": 10 - }, - { - "id": 15, - "name": "Item 15", - "price": "$15", - "amount": 9 - }, - { - "id": 16, - "name": "Item 16", - "price": "$16", - "amount": 8 - }, - { - "id": 17, - "name": "Item 17", - "price": "$17", - "amount": 1 - }, - { - "id": 18, - "name": "Item 18", - "price": "$18", - "amount": 99 - }, - { - "id": 19, - "name": "Item 19", - "price": "$19", - "amount": 100 - }, - { - "id": 20, - "name": "Item 20", - "price": "$20", - "amount": 109 - } -] diff --git a/assets/jupyter/blog.ipynb b/assets/jupyter/blog.ipynb deleted file mode 100755 index bc870dc..0000000 --- a/assets/jupyter/blog.ipynb +++ /dev/null @@ -1,48 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "sys.version_info(major=3, minor=6, micro=2, releaselevel='final', serial=0)" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "sys.version_info" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/assets/pdf/cv.pdf b/assets/pdf/cv.pdf new file mode 100644 index 0000000..1e0e3fa Binary files /dev/null and b/assets/pdf/cv.pdf differ diff --git a/assets/pdf/example_pdf.pdf b/assets/pdf/example_pdf.pdf deleted file mode 100644 index b1f80db..0000000 Binary files a/assets/pdf/example_pdf.pdf and /dev/null differ diff --git a/assets/plotly/demo.html b/assets/plotly/demo.html deleted file mode 100644 index b78329e..0000000 --- a/assets/plotly/demo.html +++ /dev/null @@ -1,71 +0,0 @@ - - - -
-
- - \ No newline at end of file diff --git a/assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4 b/assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4 deleted file mode 100644 index c4c55d7..0000000 Binary files a/assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4 and /dev/null differ diff --git a/docker-compose-slim.yml b/docker-compose-slim.yml index 2a01296..a50f4ac 100644 --- a/docker-compose-slim.yml +++ b/docker-compose-slim.yml @@ -5,7 +5,7 @@ services: image: amirpourmand/al-folio:slim #build: . ports: - - 8080:8080 + - 4000:8080 - 35729:35729 volumes: - .:/srv/jekyll diff --git a/docker-compose.yml b/docker-compose.yml index 26b8d84..77aaa63 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: image: amirpourmand/al-folio:latest build: . ports: - - 8080:8080 + - 4000:8080 - 35729:35729 volumes: - .:/srv/jekyll diff --git a/lighthouse_results/desktop/alshedivat_github_io_al_folio_.html b/lighthouse_results/desktop/alshedivat_github_io_al_folio_.html deleted file mode 100644 index 69b2bd1..0000000 --- a/lighthouse_results/desktop/alshedivat_github_io_al_folio_.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - Lighthouse Report - - - - - -
- - - - - - diff --git a/lighthouse_results/desktop/pagespeed.svg b/lighthouse_results/desktop/pagespeed.svg deleted file mode 100644 index 0469799..0000000 --- a/lighthouse_results/desktop/pagespeed.svg +++ /dev/null @@ -1 +0,0 @@ -95Performance100Accessibility100Best Practices100SEONAPWA0-4950-8990-100 \ No newline at end of file diff --git a/lighthouse_results/mobile/alshedivat_github_io_al_folio_.html b/lighthouse_results/mobile/alshedivat_github_io_al_folio_.html deleted file mode 100644 index 5d52a5a..0000000 --- a/lighthouse_results/mobile/alshedivat_github_io_al_folio_.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - Lighthouse Report - - - - - -
- - - - - - diff --git a/lighthouse_results/mobile/pagespeed.svg b/lighthouse_results/mobile/pagespeed.svg deleted file mode 100644 index 2cf0256..0000000 --- a/lighthouse_results/mobile/pagespeed.svg +++ /dev/null @@ -1 +0,0 @@ -92Performance100Accessibility100Best Practices100SEONAPWA0-4950-8990-100 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4a69027..b477073 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "master", + "name": "fethiozdol.github.io", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/readme_preview/al-folio-preview.png b/readme_preview/al-folio-preview.png deleted file mode 100644 index e9acedb..0000000 Binary files a/readme_preview/al-folio-preview.png and /dev/null differ diff --git a/readme_preview/blog.png b/readme_preview/blog.png deleted file mode 100644 index 0f36828..0000000 Binary files a/readme_preview/blog.png and /dev/null differ diff --git a/readme_preview/code.png b/readme_preview/code.png deleted file mode 100644 index 6dd6f84..0000000 Binary files a/readme_preview/code.png and /dev/null differ diff --git a/readme_preview/cv.png b/readme_preview/cv.png deleted file mode 100644 index b92c9f0..0000000 Binary files a/readme_preview/cv.png and /dev/null differ diff --git a/readme_preview/dark.png b/readme_preview/dark.png deleted file mode 100644 index 311479c..0000000 Binary files a/readme_preview/dark.png and /dev/null differ diff --git a/readme_preview/distill.png b/readme_preview/distill.png deleted file mode 100644 index 99d7847..0000000 Binary files a/readme_preview/distill.png and /dev/null differ diff --git a/readme_preview/jupyter.png b/readme_preview/jupyter.png deleted file mode 100644 index 8890918..0000000 Binary files a/readme_preview/jupyter.png and /dev/null differ diff --git a/readme_preview/light.png b/readme_preview/light.png deleted file mode 100644 index 985686a..0000000 Binary files a/readme_preview/light.png and /dev/null differ diff --git a/readme_preview/math.png b/readme_preview/math.png deleted file mode 100644 index 7f41e3e..0000000 Binary files a/readme_preview/math.png and /dev/null differ diff --git a/readme_preview/people.png b/readme_preview/people.png deleted file mode 100644 index 3e3687c..0000000 Binary files a/readme_preview/people.png and /dev/null differ diff --git a/readme_preview/photos-screenshot.png b/readme_preview/photos-screenshot.png deleted file mode 100644 index 3dce0a1..0000000 Binary files a/readme_preview/photos-screenshot.png and /dev/null differ diff --git a/readme_preview/projects.png b/readme_preview/projects.png deleted file mode 100644 index 375a898..0000000 Binary files a/readme_preview/projects.png and /dev/null differ diff --git a/readme_preview/publications.png b/readme_preview/publications.png deleted file mode 100644 index f1d0068..0000000 Binary files a/readme_preview/publications.png and /dev/null differ diff --git a/readme_preview/repositories.png b/readme_preview/repositories.png deleted file mode 100644 index e1a7ac9..0000000 Binary files a/readme_preview/repositories.png and /dev/null differ