Init
This commit is contained in:
parent
58defb32d7
commit
77bc15cf75
32
.eleventy.js
32
.eleventy.js
|
@ -2,6 +2,7 @@ import eleventyNavigationPlugin from "@11ty/eleventy-navigation"
|
|||
import pluginRss from "@11ty/eleventy-plugin-rss"
|
||||
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img"
|
||||
import pluginIcons from "eleventy-plugin-icons"
|
||||
import { DateTime } from 'luxon'
|
||||
|
||||
import {
|
||||
getAllPosts,
|
||||
|
@ -54,6 +55,7 @@ export default function (eleventyConfig) {
|
|||
/*=================*/
|
||||
eleventyConfig.addLayoutAlias("page", "layouts/page")
|
||||
eleventyConfig.addLayoutAlias("article", "layouts/article")
|
||||
eleventyConfig.addLayoutAlias("home", "layouts/home")
|
||||
|
||||
/*=================*/
|
||||
/* Collections */
|
||||
|
@ -61,11 +63,37 @@ export default function (eleventyConfig) {
|
|||
eleventyConfig.addCollection("blog", getAllPosts)
|
||||
eleventyConfig.addCollection("categoryList", getCategoryList)
|
||||
eleventyConfig.addCollection("categorisedPosts", getCategorisedPosts)
|
||||
|
||||
eleventyConfig.addCollection("activities", (collection) => {
|
||||
return collection
|
||||
.getFilteredByGlob('**/activity/*.md')
|
||||
.reverse();
|
||||
});
|
||||
/*=================*/
|
||||
/* Filters */
|
||||
/*=================*/
|
||||
eleventyConfig.addFilter("readableDate", readableDate)
|
||||
eleventyConfig.addFilter("machineDate", (dateObj) => {
|
||||
return DateTime.fromJSDate(dateObj).toFormat("yyyy-MM-dd");
|
||||
});
|
||||
eleventyConfig.addFilter("readableDate", (dateObj) => {
|
||||
return DateTime.fromJSDate(dateObj).toFormat("dd LLL yyyy");
|
||||
});
|
||||
eleventyConfig.addFilter("activityDate", (dateObj) => {
|
||||
return DateTime.fromJSDate(dateObj).toFormat("MM.yyyy");
|
||||
});
|
||||
eleventyConfig.addFilter("activityYear", (dateObj) => {
|
||||
return DateTime.fromJSDate(dateObj).toFormat("yyyy");
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter("cleanUrl", (url) => {
|
||||
return url.replace(/^(https?:|)\/\//, "");
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter("debug", (obj) => {
|
||||
console.log('debug', obj);
|
||||
return `debug: ${obj?.toString() || obj}`
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
return {
|
||||
|
|
|
@ -3,7 +3,6 @@ import slugify from 'slugify'
|
|||
/* Creating a collection containing all blogposts by filtering based on folder and filetype */
|
||||
const getAllPosts = (collectionApi) => {
|
||||
return collectionApi.getFilteredByGlob('./src/blog/*.md')
|
||||
.reverse()
|
||||
}
|
||||
|
||||
const getCategoryList = (collectionApi) => {
|
||||
|
@ -53,6 +52,7 @@ const getCategorisedPosts = (collectionApi) => {
|
|||
return categorisedPosts
|
||||
}
|
||||
|
||||
|
||||
export {
|
||||
getAllPosts,
|
||||
getCategoryList,
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<li class="activity">
|
||||
<time class="activity__time">
|
||||
{# If there’s a start date #}
|
||||
{%- if a.data.dateStart -%}
|
||||
{%- if a.data.dateFormat == "year" -%}
|
||||
{{ a.data.dateStart | activityYear }}
|
||||
{%- else -%}
|
||||
{{ a.data.dateStart | activityDate }}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- if a.data.dateStart and a.data.dateEnd -%}
|
||||
–
|
||||
{%- endif -%}
|
||||
{%- if a.data.dateEnd -%}
|
||||
{%- if a.data.dateFormat == "year" -%}
|
||||
{{ a.data.dateEnd | activityYear }}
|
||||
{%- else -%}
|
||||
{{ a.data.dateEnd | activityDate }}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
</time>
|
||||
<p>
|
||||
{%- if a.data.type -%}
|
||||
<span>{{ a.data.type }}</span>
|
||||
{%- endif -%}
|
||||
{%- if a.data.type and a.data.title -%}
|
||||
,
|
||||
{%- endif -%}
|
||||
{%- if a.data.title -%}
|
||||
{%- if a.data.url -%}
|
||||
<a href="{{ a.data.url }}">{{ a.data.title }}</a>
|
||||
{%- else -%}
|
||||
{{ a.data.title }}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- if a.data.location -%}
|
||||
<br>{{ a.data.location }}
|
||||
{%- endif -%}
|
||||
{% if a.data.subtext %}
|
||||
<br><span class="color-grey">{{ a.data.subtext | safe }}</span>
|
||||
{% endif %}
|
||||
</p>
|
||||
</li>
|
|
@ -1,6 +1,6 @@
|
|||
{% set categories = collections.categoryList %}
|
||||
<nav role="navigation" aria-label="category navigation" >
|
||||
<span>Filter posts by category:</span>
|
||||
<span>Categories:</span>
|
||||
<ul>
|
||||
<li class="category__link {{ ' active' if page.url == '/blog/'}}">
|
||||
<a class="category__link"
|
||||
|
|
|
@ -1,11 +1,3 @@
|
|||
<footer role="contentinfo">
|
||||
<p>This project is maintained by <span>Claudia Reynders</span>, since 2022. Find me on
|
||||
<a class="social-media__link"
|
||||
href="https://twitter.com/claudia_rndrs"
|
||||
target="_blank">
|
||||
{% icon "custom:twitter", class="icon" %}
|
||||
|
||||
<span class="sr-only">Twitter</span>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</footer>
|
|
@ -1,7 +1,7 @@
|
|||
{% set navItems = collections.all | eleventyNavigation %}
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<span>My blog</span>
|
||||
<span>Galuh Sahid</span>
|
||||
</div>
|
||||
<nav role="navigation" aria-label="main navigation" >
|
||||
<ul>
|
||||
|
@ -10,6 +10,12 @@
|
|||
<a href="{{ item.url }}">{{ item.key }}</a>
|
||||
</li>
|
||||
{%- endfor -%}
|
||||
<li class="nav__item">
|
||||
<a href="https://galuh.myportfolio.com">photography</a>
|
||||
</li>
|
||||
<li class="nav__item">
|
||||
<a href="https://galuh.myportfolio.com/sketches-1">sketches</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
|
@ -0,0 +1,7 @@
|
|||
<h2>Publications and talks</h2>
|
||||
|
||||
<ul class="activities">
|
||||
{% for a in collections.activities %}
|
||||
{% include "components/activity-item.njk" %}
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -0,0 +1,22 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ metadata.language }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>✨</text></svg>">
|
||||
<title>{{ title or metadata.title }}</title>
|
||||
{% include "../components/metadata.njk" %}
|
||||
<script type="module" src="/assets/svg-icon-sprite.js"></script>
|
||||
<link rel="stylesheet" href="{{'/assets/theme.css' | url }}" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "../components/header.njk" %}
|
||||
<main role="main">
|
||||
{{ content | safe }}
|
||||
</main>
|
||||
{% include "../components/profile.njk" %}
|
||||
{% include "../components/footer.njk" %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Estimating the collected funding amount of the social project campaigns in a crowdfunding platform
|
||||
type: Paper
|
||||
location: 2017 International Conference on Advanced Computer Science and Information Systems (ICACSIS), Jakarta
|
||||
dateFormat: "year"
|
||||
dateEnd: 2017-01-01
|
||||
dateStart:
|
||||
url: https://ieeexplore.ieee.org/document/8355046
|
||||
---
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: Building data driven web apps that everyone can use
|
||||
type: Talk
|
||||
location: PyCon APAC
|
||||
dateFormat: "year"
|
||||
dateEnd: 2018-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/building-a-data-driven-web-app-that-everyone-can-use/
|
||||
slides: https://speakerdeck.com/galuhsahid/building-a-data-driven-web-app-that-everyone-can-use/
|
||||
---
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Building command-line tools and dashboards with JavaScript
|
||||
type: Talk
|
||||
location: ScotlandJS
|
||||
dateFormat: "year"
|
||||
dateEnd: 2018-01-01
|
||||
dateStart:
|
||||
url: https://www.youtube.com/watch?v=kZwDoMTyMjo/
|
||||
slides: https://speakerdeck.com/galuhsahid/building-command-line-tools-and-dashboards-with-javascript/
|
||||
code: https://github.com/galuhsahid/scotlandjs2018/
|
||||
---
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Machine learning on the web
|
||||
type: Talk
|
||||
location: DevFest Brunei
|
||||
dateFormat: "year"
|
||||
dateEnd: 2019-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
slides: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
code: https://github.com/galuhsahid/ml-on-the-web/
|
||||
---
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Machine learning on the web
|
||||
type: Talk
|
||||
location: DevFest Singapore
|
||||
dateFormat: "year"
|
||||
dateEnd: 2019-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
slides: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
code: https://github.com/galuhsahid/ml-on-the-web/
|
||||
---
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Machine learning on the web
|
||||
type: Talk
|
||||
location: DevFest Yangon
|
||||
dateFormat: "year"
|
||||
dateEnd: 2019-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
slides: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
code: https://github.com/galuhsahid/ml-on-the-web/
|
||||
---
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Data science in the browser with Iodide
|
||||
type: Talk
|
||||
location: MozTechSpeakers Meetup
|
||||
dateFormat: "year"
|
||||
dateEnd: 2019-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/data-science-in-the-browser-with-iodide
|
||||
slides: https://speakerdeck.com/galuhsahid/data-science-in-the-browser-with-iodide
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: Introduction to word embeddings
|
||||
type: Talk
|
||||
location: PyCon CZ
|
||||
dateFormat: "year"
|
||||
dateEnd: 2019-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/introduction-to-word-embeddings/
|
||||
slides: https://speakerdeck.com/galuhsahid/introduction-to-word-embeddings/
|
||||
code: https://github.com/galuhsahid/intro-to-word-embeddings/
|
||||
video: https://www.youtube.com/watch?v=mniWotxI4C8/
|
||||
---
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: E-Commerce Merchant Classification using Website Information
|
||||
type: Paper
|
||||
location: 9th International Conference on Web Intelligence, Mining and Semantics, Seoul
|
||||
dateFormat: "year"
|
||||
dateEnd: 2019-01-01
|
||||
dateStart:
|
||||
url: https://dl.acm.org/doi/10.1145/3326467.3326486
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: Startup Coffee Chat - Machine Learning
|
||||
type: Panel
|
||||
location: Google Developers Space, Singapore
|
||||
dateFormat: "year"
|
||||
dateEnd: 2020-01-01
|
||||
dateStart:
|
||||
url: https://www.youtube.com/watch?v=CY0RiwpG9TM
|
||||
slides:
|
||||
video: https://www.youtube.com/watch?v=CY0RiwpG9TM
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: First steps towards your first machine learning project
|
||||
type: Talk
|
||||
location: Girls in ICT, Brunei
|
||||
dateFormat: "year"
|
||||
dateEnd: 2020-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/first-steps-towards-your-first-machine-learning-project/
|
||||
slides: https://speakerdeck.com/galuhsahid/first-steps-towards-your-first-machine-learning-project/
|
||||
video:
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: Call for Proposals 101
|
||||
type: Talk
|
||||
location: Global Diversity CFP Day Jakarta
|
||||
dateFormat: "year"
|
||||
dateEnd: 2020-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
slides: https://speakerdeck.com/galuhsahid/devfest-machine-learning-on-the-web/
|
||||
video:
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: Build your own image classifier with transfer learning
|
||||
type: Workshop
|
||||
location: Gojek
|
||||
dateFormat: "year"
|
||||
dateEnd: 2020-01-01
|
||||
dateStart:
|
||||
url: https://www.loket.com/event/belajar-bareng-team-data-science-gojek_p41U
|
||||
slides:
|
||||
video:
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: BERT for Text Classification with Keras/Tensorflow 2
|
||||
type: Workshop
|
||||
location: WTM DevFest Kuala Lumpur & Singapore
|
||||
dateFormat: "year"
|
||||
dateEnd: 2020-01-01
|
||||
dateStart:
|
||||
url: https://gdg.community.dev/events/details/google-gdg-kuala-lumpur-presents-wtm-devfest-kuala-lumpur-singapore-2020/
|
||||
slides:
|
||||
video:
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: A whirlwind tour of machine learning with Tensorflow
|
||||
type: Keynote
|
||||
location: Women Techmakers - International Women’s Day 2020
|
||||
dateFormat: "year"
|
||||
dateEnd: 2020-01-01
|
||||
dateStart:
|
||||
url: https://speakerdeck.com/galuhsahid/a-whirlwind-tour-of-machine-learning-with-tensorflow/
|
||||
slides: https://speakerdeck.com/galuhsahid/a-whirlwind-tour-of-machine-learning-with-tensorflow/
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: CLIP model trained on Indonesian data
|
||||
type: Talk
|
||||
location: PyCon ID
|
||||
dateFormat: "year"
|
||||
dateEnd: 2021-01-01
|
||||
dateStart:
|
||||
url: https://pycon.id/
|
||||
slides: https://speakerdeck.com/galuhsahid/clip-indonesian
|
||||
video:
|
||||
code: https://github.com/galuhsahid/clip-indonesian
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: Space for International Development & Humanitarian Aid
|
||||
type: 1st Winner
|
||||
location: CASSINI Hackathon Germany
|
||||
dateFormat: "year"
|
||||
dateEnd: 2023-01-01
|
||||
dateStart:
|
||||
url: https://www.cassini.eu/hackathons/portfolio
|
||||
slides: https://speakerdeck.com/galuhsahid/clip-indonesian
|
||||
video: https://vimeo.com/883205997/be5b5cd9a4
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
title: Running Python data transformations at scale with dbt and Astronomer Cosmos
|
||||
type: Talk
|
||||
location: PyData Berlin Meetup
|
||||
dateFormat: "year"
|
||||
dateEnd: 2024-11-21
|
||||
dateStart:
|
||||
url: https://www.meetup.com/pydata-berlin/events/304364325/
|
||||
slides:
|
||||
video:
|
||||
code:
|
||||
---
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"permalink": false
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
.activity {
|
||||
margin-bottom: 0.875rem;
|
||||
list-style-type: none;
|
||||
align-items: baseline;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.activity__time {
|
||||
color: var(--color-grey-dark);
|
||||
margin-right: 1rem;
|
||||
min-width: 5.125rem;
|
||||
}
|
|
@ -7,7 +7,7 @@ html {
|
|||
background-color: $bg-clr;
|
||||
color: $base-clr;
|
||||
font-family: $main-font;
|
||||
font-size: 50%;
|
||||
font-size: 55%;
|
||||
scroll-behavior: smooth;
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
.article__item {
|
||||
+.article__item {
|
||||
margin-top: 1.5em;
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
|
||||
.article__list {
|
||||
list-style-type: none;
|
||||
}
|
|
@ -1,11 +1,12 @@
|
|||
@import url('https://fonts.googleapis.com/css2?family=Montagu+Slab:wght@400;700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap');
|
||||
|
||||
$main-font: 'Gill Sans', 'Gill Sans MT', 'Calibri', 'Trebuchet MS', 'sans-serif';
|
||||
$accent-font: 'Montagu Slab', serif;
|
||||
$main-font: 'Inter', 'Calibri', 'Trebuchet MS', 'sans-serif';
|
||||
$accent-font: 'Inter', serif;
|
||||
|
||||
/* Colours */
|
||||
$light-shade: #E9EFC0;
|
||||
$dark-shade: #4E944F;
|
||||
$dark-shade: #333333;
|
||||
$darkest-shade: darken($dark-shade, 17%);
|
||||
$accent-shade:#FF8C32;
|
||||
|
||||
|
|
|
@ -3,4 +3,5 @@
|
|||
@import './base';
|
||||
|
||||
@import './blog';
|
||||
@import './article';
|
||||
@import './article';
|
||||
@import './activity';
|
|
@ -12,6 +12,5 @@ pagination:
|
|||
|
||||
<h1>{{ title }}</h1>
|
||||
{% include "./_includes/components/categoryNav.njk" %}
|
||||
<p>This view contains a list of all blogposts sorted from newest to oldest.</p>
|
||||
|
||||
{% include "./_includes/components/articleList.njk" %}
|
|
@ -0,0 +1,122 @@
|
|||
---
|
||||
layout: article
|
||||
title: Making your first open source contribution, part 1 - finding projects, issues, and mentored programs
|
||||
date: 2022-02-01
|
||||
category: "open source"
|
||||
---
|
||||
|
||||
I had always wanted to contribute to open source, but at the same time I found it to be a bit intimidating & overwhelming. It wasn’t until a few years later that I made my first open source contribution.
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
The paragraph below from [PyCon US](https://us.pycon.org/2019/hatchery/mentoredsprints/) perfectly summarized the struggles I faced when I tried to make my first contribution:
|
||||
|
||||
> From a technical perspective, interacting with web-based hosting services (such as GitHub, GitLab, etc.), branching and opening pull requests can be overwhelming if these are not everyday actions of your workflow. The correctness of the code and potential bugs are other common obstacles and fears any newcomer might face. Not to mention the time and frustration accumulated over the task of finding a ‘beginner-friendly’ issue to work on.
|
||||
|
||||
I learned a lot of things that I wished I had known about earlier, which I’m going to share through a series of blog posts in three parts.
|
||||
|
||||
Everyone’s experience is different, though, so I’m mainly sharing about the things I’ve experienced. What works for me might not work for you & vice versa, & it’s totally OK!
|
||||
|
||||
If you’re here, you probably already know why you want to contribute to open source. It’s outside of the scope of these posts, so if you want to read more about this, Open Source Guides [has a comprehensive section](https://opensource.guide/how-to-contribute/#why-contribute-to-open-source) on the topic.
|
||||
|
||||
---
|
||||
|
||||
## Finding projects
|
||||
|
||||
### Find projects that you use
|
||||
|
||||
I started out by browsing through projects that I use daily such as pandas, matplotlib, & scikit-learn. I find that working on projects that I often use would provide a greater motivation for me to work on it. Using it every day means I’m already pretty familiar with the projects too, which helps.
|
||||
|
||||
However, I soon learned that this not that straightforward. These libraries are very popular and the issues that are suitable for beginners seem to be gone within minutes after someone posts the issue. The ones left are the more complicated ones that I wasn’t confident enough I’d be able to tackle.
|
||||
|
||||
Now, this depends on you—of course no one’s telling you to NOT work on them! In fact, you’ll probably learn the most from them. But when I started out, I didn’t have much free time since I was still juggling school at the same time. Working on complicated issues would definitely take me a while, so I decided to look for other options.
|
||||
|
||||
### Browse websites that help you discover open source projects that need help
|
||||
|
||||
I also browsed various websites that help me discover open source projects that need help. A few websites that I’ve tried:
|
||||
|
||||
- [CodeTriage](http://codetriage.com/) - [https://www.codetriage.com/](https://www.codetriage.com/)
|
||||
|
||||
- Mozilla’s Bugs Ahoy - [https://codetribute.mozilla.org/](https://codetribute.mozilla.org/)
|
||||
|
||||
- Contributors Wanted - [https://dev.to/t/contributorswanted](https://dev.to/t/contributorswanted)
|
||||
|
||||
|
||||
These websites exposed me to more open source projects that I had never known before, which is great! While this strategy might work for a lot of people, it didn’t really work for me—since I had never used these projects before, I had to learn everything from zero, & sometimes it was until much later that I realized I wasn’t really interested in working on the project. I guess time was a huge constraint for me, & if I had spent more time I’m sure I would come across something that fits me.
|
||||
|
||||
### Follow open source project authors/maintainers on social media
|
||||
|
||||
I think I discovered most of the projects I contributed to through Twitter. In fact, I finally made my first open source contribution to [Sarah Drasner’s Object Explorer](https://github.com/sdras/object-explorer/pull/26).
|
||||
|
||||
I follow a lot of people who happen to be working on their own open source projects, & since I usually follow people who work on things that intersect my interests, their projects usually interest me too. Plus, they might tweet about their new projects that don’t have a lot of contributors yet, & new projects have a much smaller scope, so the barrier to entry is usually lower.
|
||||
|
||||
For example, here is [Andreas Mueller](https://twitter.com/amuellerml) tweeting about his new project:
|
||||
|
||||
> If you're interested in becoming involved in my new project dabl [https://t.co/Mvxdh68eZv](https://t.co/Mvxdh68eZv), I tagged some easy first issues. Given that it's pretty early in the development, the barrier to entry should hopefully be much lower than in sklearn for example: [https://t.co/rNors7QjkI](https://t.co/rNors7QjkI)— Andreas Mueller (@amuellerml) [January 28, 2020](https://twitter.com/amuellerml/status/1222202599539167238?ref_src=twsrc%5Etfw)
|
||||
|
||||
## Finding issues
|
||||
|
||||
Now that you’ve got a project you’d like to work on, it’s time to find an issue that you can work on!
|
||||
|
||||
### It’s not always about writing code
|
||||
|
||||
One thing I want to emphasize here is that the issue that you pick does not always have something to do with writing code. Writing documentation, translating projects, designing… they all also count as contributing to open source too. Fixing typos is also contributing to open source! There’s room for everyone & every role.
|
||||
|
||||
### Browse through beginner-friendly labels
|
||||
|
||||
Each issue usually has labels or tags. You can browse through issues that are labeled with labels such as **good-first-issue** or **help-wanted**—these are issues that are approachable for first-time contributors. In fact, GitHub has just recently launched [a feature where it automatically labels beginner-friendly issues](https://github.blog/2020-01-22-how-we-built-good-first-issues/) using the power of machine learning. You can just go to the following link: `github.com/<owner>/<repository>/contribute` . For example, if you want to contribute to electron for the first time, you can go to this link: [https://github.com/electron/electron/contribute](https://github.com/electron/electron/contribute).
|
||||
|
||||
If you find that:
|
||||
|
||||
- **No one’s working on it**: Awesome! Usually, what you should do next is drop a comment & comment that you’re going to work on this issue. This is a way to let everyone know that someone (that’s you!) is currently working on this issue to avoid double work.
|
||||
|
||||
- **Someone says they’re working on it, but it’s been months:** If you find an issue where someone has said that they’re working on it but there seems to be no activity for the past few months, feel free to comment and ask if you can take over the issue!
|
||||
|
||||
|
||||
One thing to remember is that you can make your own issue, & you can work on it too! Though it might be acceptable to directly make a pull request, keep in mind that some projects, like [rust-wasm](https://github.com/rustwasm/wasm-pack/blob/master/CONTRIBUTING.md), explicitly mention that you have to create your own issue before making a pull request because some discussion might be required. So before you make your own PR, open the issue first to make sure that you’re working on something that people agree should be worked on.
|
||||
|
||||
However, before you create that issue…
|
||||
|
||||
- **Check out the existing PRs and Issues**There is probably another similar issue open, & you don’t want to create a duplicate issue to save your time & the maintainers’ time.
|
||||
|
||||
- **Check out the README (more on this on the next post!)** Some open source projects have a guideline on how to create your own issue. This is to make sure that you’ve provided all the information necessary regarding the issue to minimize back-and-forths between you & the maintainers.
|
||||
|
||||
|
||||
## Finding mentored programs
|
||||
|
||||
Contributing to open source does not have to be a lonely business, especially whenever it’s your first time - it’s totally OK to have help! In fact, having mentors and peers that also learn and work together with you might just accelerate your learning.
|
||||
|
||||
How do you find such mentors and peers? There are a few programs that aim to encourage new contributors in open source projects, and in these programs, participants will usually be paired with a mentor that will guide them throughout the program.
|
||||
|
||||
### Remote mentorships/internships with mentors
|
||||
|
||||
The three programs below are probably the most well-known, though I haven’t personally participated in them because when I learned about them, I was no longer eligible:
|
||||
|
||||
- [Google Summer of Code](http://summerofcode.withgoogle.com/): students get the chance to work with an open source organization on a 3-month programming project during their break. Organizations that have participated include Blender Foundation, DBPedia, GNOME, & [others](https://summerofcode.withgoogle.com/archive/).
|
||||
- [Google Season of Docs](https://developers.google.com/season-of-docs/): same as Google Summer of Code, but focusing on technical writing contributions.
|
||||
- [Outreachy Internship](https://www.outreachy.org/): internships to work in open source and free software. Open to applicants around the world. Internships can be done remotely. People facing under-representation, systemic bias, or discrimination in the technology industry of their country are encouraged to apply.
|
||||
|
||||
|
||||
I’ve personally participated in these programs below, & can totally vouch for them!
|
||||
|
||||
- [Increasing Rust’s Reach](https://reach.rust-lang.org/): run by the Rust Programming Language Team to grow Rust’s community of project collaborators and leaders. Participants are individuals who are underrepresented in Rust’s community and the tech industry. Each participant works on a Rust project for three months with a Rust team member. The program does not seem to exist anymore, but you can read about my experience of participating in the program and contributing to Rust [here](https://speakerdeck.com/galuhsahid/rust-reach-and-contributing-to-rust).
|
||||
- [pandas mentoring](https://github.com/python-sprints/pandas-mentoring): I came across Marc Garcia’s tweet one day:
|
||||
|
||||
|
||||
> I think it's time to increase the diversity of the [@pandas_dev](https://twitter.com/pandas_dev?ref_src=twsrc%5Etfw) team.
|
||||
>
|
||||
> If you need mentoring to become a regular pandas contributor, and you're non-male from outside US/Europe, please DM me.
|
||||
>
|
||||
> Also DM me if your company wants to provide funds to give scholarships to the mentees.— Marc Garcia (@datapythonista) [July 24, 2019](https://twitter.com/datapythonista/status/1154177854999056384?ref_src=twsrc%5Etfw)
|
||||
|
||||
I DM’d him & I was super excited because I use pandas every day! Marc has done a tremendous job on running the mentorship. Since then, I’ve made several contributions to pandas from contributing to its documentation to fixing bugs.
|
||||
|
||||
### Mentored sprints
|
||||
|
||||
The mentorship programs I mentioned above are mostly done remotely. However, there are also mentored sprints that you can attend if there is one happening in your city.
|
||||
|
||||
In a sprint, people gather together to squash bugs or write documentation in a short period a time, such as a day or a weekend. Mentored sprints specifically have mentors that can guide participants on making their contributions. Imagine that by the end of the day, you’ll most likely already make your first contribution while also making new friends in the process!
|
||||
|
||||
[PyCon US has mentored sprints last year](https://us.pycon.org/2019/hatchery/mentoredsprints/), and there were a lot of interesting projects that participated from CPython to TensorFlow.
|
||||
|
||||
[Python Sprints](https://python-sprints.github.io/) is an non for profit group that gathers coders who want to help improve open source using Python. They have held sprints all around the world, and one of their goals is to help people get started, so if there is one in your city you should definitely drop by! London has held a lot of sprints, so if you want to take a look at how these sprints usually are like [check it out here](https://www.meetup.com/Python-Sprints/).
|
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
layout: article
|
||||
title: Making your first open source contribution, part 2 - before you start contributing
|
||||
date: 2022-02-02
|
||||
category: "open source"
|
||||
---
|
||||
|
||||
Congratulations! You’ve found a project and issue that you will be working on. 🥳 Before you jump into making your first contribution and making a pull request, there are several things that you need to do first.
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
## Read the README
|
||||
|
||||
The README contains everything that you need to know about a project. Since the README is the first entrypoint for everyone—from users to potential contributors—it usually covers a wide range of things: what is this project? Where do things go? How do you use it? Where is the contributing guide? What files you should look at first? How to reach out to the maintainers or community should you have any questions?
|
||||
|
||||
Some information that is specifically aimed at contributors might be hosted elsewhere. I’ll get into this later.
|
||||
|
||||
## Read the code of conduct
|
||||
|
||||
A code of conduct establishes expectations for behavior for a project’s participants [1](https://galuh.me/contributing-os-2/#fn-1). In a code of conduct you might find information such as:
|
||||
|
||||
- what behaviors are encouraged
|
||||
- what behaviors are unacceptable
|
||||
- procedures on what to do when something inappropriate happens & who to contact
|
||||
|
||||
Code of conducts help to ensure a safe & inclusive environment. Always make sure you check out the code of conduct first before participating in the community.
|
||||
|
||||
## Read the contributing guide
|
||||
|
||||
The contributing guide is usually located in a file called CONTRIBUTING.md. If you can’t find the file, don’t worry! Not every project hosts their contributing guide in GitHub. For example, pandas hosts its contributing guide in [its documentation website](https://dev.pandas.io/docs/development/contributing.html). The link to the guide is usually linked somewhere in the README.md for visibility. Smaller projects may have their contributing guide in the README.md.
|
||||
|
||||
A contributing guide usually outlines steps that you need to do when you’re contributing. This may include things such as:
|
||||
|
||||
- **How to open up a new issue:** maintainers typically encourage people to open up a new issue before they start contributing, if the issue does not yet exist. Some projects also have issue templates that you have to fill out properly. [This issue in the Go repository](https://github.com/golang/go/issues/36960) is an example of issue that uses a predefined issue template.
|
||||
- **How to set up the development environment:** every project requires a different setup. Some projects, like pandas, requires you to [build it from source](https://dev.pandas.io/docs/development/contributing.html#id9) so you can test out the code changes.
|
||||
- **Code standards or style:** before writing your code, you need to get familiar with the style guide, linters, and other tools that the project uses to keep their code consistent & easy to read. Some projects like Rust already has a script that makes sure your code is consistent with Rust’s guidelines, [which you can find in their CONTRIBUTING.md](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#pull-requests).
|
||||
- **Tests:** while most projects already have CIs set up to check your code, you might want to avoid comitting your changes without really knowing whether they will pass the test or not, so it’s best that you know how to test your code locally.
|
||||
- **Specific instructions on writing commit messages:** some projects, like [pandas](https://dev.pandas.io/docs/development/contributing.html#id44), have conventions on writing commit messages.
|
||||
- **Pull request workflow:** every project has a different workflow for pull requests. By familiriazing yourself with this, you will know what to expect when submitting your pull request. Some projects have a bot that help maintainers to assign reviewers, and these bots might request you to add some more information if needed. A few projects such as [Kubernetes](https://github.com/kubernetes/kubernetes) require you to sign a Contributor License Agreement (CLA) if it’s your first time contributing to the repository. Another thing is that once you submit your pull request, you might encounter merge conflicts, and some projects like Rust have [a specific policy](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#pull-requests) regarding whether you should rebase or merge.
|
||||
|
||||
## Browse around the repository
|
||||
|
||||
Take a look around the repository & notice how people usually open issues & write pull requests. You might also want to take notes on how the maintainers respond to people who are contributing to their project. If it seems that the environment has a negative atmosphere, or if you notice that issues and pull requests are not being responded to, it’s probably best to redirect your time and effort elsewhere.
|
||||
|
||||
Whew. It might seem like a lot, but I actually find comfort in reading these READMEs, Code of Conduct, & contributing guides—they are here in your best interest to ensure that you have a good experience contributing to their projects. Before contributing to a new project, I personally enjoy perusing through every guide I can get my hands on. It might take a while—for large projects, it might take me an entire day to really wrap my hand around it—but it does save a lot of time later when I’m at a point where I’m writing my code, making pull requests, & getting my pull requests reviewed.
|
||||
|
||||
If you get confused, make a mistake, or feel like there are missing steps, don’t worry! These guides are not perfect, & it’s possible that they do miss some essential information. This is an opportunity for you to open a new issue and make a pull review to help the next person, because really, chances are other people will get confused over the same thing, too.
|
|
@ -0,0 +1,99 @@
|
|||
---
|
||||
layout: article
|
||||
title: Making your first open source contribution, part 3 - navigating new codebases
|
||||
date: 2022-02-05
|
||||
category: "open source"
|
||||
---
|
||||
|
||||
You’ve got your development environment set up, and everything’s working wonderfully. Sweet! Time to dive into the codebase… except…
|
||||
|
||||
You’re lost.
|
||||
|
||||
This part is mostly about navigating a new codebase, especially when it’s a large one, so the advice below probably applies to any large codebase & not just open source projects.
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
When you’re looking to contribute to open source projects though it might take a while to find a project that feels right for you, and as a consequence you’ll be meeting new codebases more often.
|
||||
|
||||
Navigating new, large codebases can be especially challenging for someone who:
|
||||
|
||||
a) is currently in school, with no access to large codebases (this was me!)
|
||||
|
||||
b) mostly work in self-initiated or small-sized codebases (me, currently!)
|
||||
|
||||
At a glance, this post might only be relevant to contributions that involve writing code, but I’ve personally used these tips when contributing to the documentation too. Sometimes documentations are coupled with code that it’s impossible for you to not touch the project’s codebase. Besides, when writing a documentation for a piece of code, you still need to understand what the code does & sometimes how it interacts with other functions in the project.
|
||||
|
||||
### Use it
|
||||
|
||||
You might come across a project that you’ve never used before, but you want to contribute to it, & that’s fine! In fact, although I use the pandas library daily, I don’t use all of the functions, so I did find myself working on something that I’ve never used before.
|
||||
|
||||
My first tip is: use it. If it’s a new library, go through its tutorials or “getting started” guides, & play around until you’re comfortable enough with it.
|
||||
|
||||
If it’s a new function, check out the documentation, run the examples or use it in a toy problem so you can get a better intuition on the problem you’re trying to solve.
|
||||
|
||||
Even if it’s a function that you have used before, you might need to modify parts that you’re not familiar of, e.g. parameters that you’ve never had to use before so it’s probably still useful to do the things mentioned above.
|
||||
|
||||
### Explore the tests
|
||||
|
||||
Sometimes it’s not very clear from the documentation what a function is supposed to do. Sometimes there is no documentation at all. If that’s the case, usually what I’d do next is explore the tests, especially unit tests, if there are any. Unit tests are great to learn from because they can show you how to correctly invoke a function or show you the expected behavior of a piece of code.
|
||||
|
||||
Tests can usually be found in their own folder, such as `/tests`.
|
||||
|
||||
Here’s an example from [pandas](https://github.com/pandas-dev/pandas/blob/master/pandas/tests/indexes/categorical/test_category.py). Let’s say that you want to know how to use the function `rename_categories` for `CategoricalIndex` & what should happen when yo
|
||||
|
||||
The test can give you some idea that, okay, if I have the following `CategoricalIndex`:
|
||||
|
||||
```python
|
||||
CategoricalIndex(list("aabbca"), categories=list("cab"))
|
||||
```
|
||||
|
||||
And then I apply the `rename_categories` function:
|
||||
|
||||
```python
|
||||
result = ci.rename_categories(list("efg")))
|
||||
```
|
||||
|
||||
I’m supposed to get back a:
|
||||
|
||||
```python
|
||||
CategoricalIndex(list("ffggef"), categories=list("efg"))
|
||||
```
|
||||
|
||||
### Find keywords in the issue & use them to find relevant parts in the codebase
|
||||
|
||||
I usually extract important keywords in the issue, type that in the search bar of my code editor (I use VS Code) & see what other pieces of code pops up & where.
|
||||
|
||||
For example, I worked on an [issue](https://github.com/python-sprints/pandas-mentoring/issues/156) where I had to update the index parameter in pandas’ `to_parquet`. The first thing I did was search `to_parquet` in my code editor to see where the function is.
|
||||
|
||||
There are a lot of search results including other pieces of code that are calling the function `to_parquet`, instead of the `to_parquet` function itself. For this issue, I’m not interested in these other parts of the codebase, so I had to narrow down my search.
|
||||
|
||||
I searched for `def to_parquet()` instead. In Python, the keyword `def` is the start of a function header, so I can be sure that I will get the locations of the `to_parquet` function itself. Of course, other programming languages will be different. The key here is sometimes you need to think of some tricks that can help you get better search results.
|
||||
|
||||
### Search for similar issues & PRs
|
||||
|
||||
Other people might have made PRs that solved problems that are similar to the one that you’re solving right now. You can use the keywords from the issue to search for other similar issues & PRs. A few things that you can learn from reading other issues & PRs:
|
||||
|
||||
- **Possibly relevant code & files**: if the previous steps didn’t work for you, this can help. In GitHub, you can find these by checking out the “Files Changed” tab in the PR. [Here is an example](https://github.com/pandas-dev/pandas/pull/31047/files).
|
||||
- **Pointers on what to do**: although the PR that I’m looking at is not solving the same exact problem, sometimes they do give clues on what I can do to solve my problem, e.g. an existing helper function that I didn’t know about that can simplify my solution.
|
||||
- **Feedback from maintainers**: oftentimes, maintainers request for changes before they approve your PRs. These are well recorded in the thread within the pull request, & there’s always a thing or two that I can learn from them.
|
||||
- **Bugs**: a PR can introduce new bugs, which are often discovered after the PR is approved & merged. Learning about these bugs helps me become aware of the kinds of bugs that I may possibly introduce with my PR.
|
||||
|
||||
### Join the project’s communication platform(s) & search for related discussions
|
||||
|
||||
Most projects have platforms where they have discussions regarding the development of the project that are open to public, be it Slack, Gitter, mailing list, or other channels. These are usually listed either in the README or in their contributing guide. You can search for related discussions because it’s possible that others have asked similar questions, but of course you can ask your own question as well… which will bring me to my next point.
|
||||
|
||||
### Ask for help
|
||||
|
||||
You might have done all of the above & still get stuck. That’s fine! Don’t be afraid to ask for pointers - you can do this by raising a question in the relevant issue or asking questions in the dev channel (see above). You might find this scary at first, but if the project you’re working on has a Code of Conduct (they better do!), it can be a reminder for you that inappropriate behaviors are not tolerated.
|
||||
|
||||
From browsing various repositories & joining communication channels, I also learned that people do ask questions all the time & it’s OK! I guess I had this assumption that everyone (but me) knows everything & this also contributed to how I initially perceived open source: intimidating & overwhelming. Seeing how people ask questions & how maintainers positively respond really helps shatter that unrealistic assumption.
|
||||
|
||||
Diving into new codebases is not a trivial thing, so if you feel like you’re having difficulty making progress, it’s totally normal. Even the most experienced programmers still need time to understand a new codebase.
|
||||
|
||||
### Final notes
|
||||
|
||||
One last thing I want to emphasize: **you don’t have to get it perfect the first time**.
|
||||
|
||||
Your first contribution—or the ones after, really—does not have to be a pull request that provides a major feature with changes of thousands of lines of code. Your first pull request does not have to be fault-free—sometimes you mess up your git to the point that the only solution you can think of is deleting your repository & redoing your work (we all have been there, haven’t we?). It’s okay if you forget to write your commit message with the correct prefix per the convention. In fact, you might find that these hiccups still happen in your second, third, fourth… hundredth contribution. You’ll find that it’s not the end of the world. You’ll learn. You’ll continue contributing anyway.
|
||||
|
||||
The most important thing is to get started, & I hope this 3-part series helps you to do just that. :)
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
layout: article
|
||||
title: Putting in the work
|
||||
date: 2021-11-09
|
||||
category: "learning"
|
||||
---
|
||||
|
||||
During my four-month unexpected sabbatical, I started putting on more effort towards endeavors that I haven’t had a chance to dabble in a very long time. It’s very slow going at times—well, most of the time—which can get very frustrating.
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
Here’s one example: I’ve studied French on and off for 8 years and I decided to use this opportunity to establish a sustainable self-learning routine for myself. At the start of the journey, I knew I’m not going to be able to read Sartre in French overnight. But at one point I felt very frustrated because it seems like I was going nowhere. I knew I’m at least at A1 because I’ve passed the test years ago, but I’m not sure if I had already gone anywhere past that. If I were to take the DELF A2 right now I’d probably be able to get a 60 at maximum.
|
||||
|
||||
Of course, the next logical (mandatory /s here) step that I did was to compare my almost nonexistent French skills to other things that I think I’m decent at, like English (side note: I’m not saying that my English is perfect—the other day, a friend mentioned flatulence and another friend used the word felicitous in a sentence and I had to look up what those words mean. Let me tell you that I was pleasantly surprised to learn that flatulence doesn’t mean what I thought it meant. Needless to say, it’s my new favorite word now. It’s just that I can somehow string words better in English than French). The odd thing is I honestly don’t remember really learning English except for looking up for words in the dictionary when I was reading Pride and Prejudice for the first time. Everything else just kind of happened.
|
||||
|
||||
Recently I realized that I actually haven’t put in the work to achieve what I want to achieve. Sounds simple, right? Right. But my mind always went back to how learning French seem exponentially harder than learning English. Maybe it’s true, maybe it’s not, who the heck knows.
|
||||
|
||||
But did English really just happen to me? Honestly, I never really measured it quantitatively, so one way to find out is to do a quick back-of-the-envelope calculation: my English noticeably improved when I spent a lot of time on the internet around 2008-2011; I was probably online for 14 hours per day on the weekdays (this might seem like a high number, but I was online most of the time even as a kid. I literally slept in front of my laptop), and 20 hours per day on the weekends (what is sleep?), but let’s take the conservative calculation and go with 14 hours/day; my rough calculation puts me at 14 hours / day x (365 days x 3 years) = 15,330 hours! I “learned” English for 15,330 hours within that timespan alone. This excludes all the other times I learn English of course, which by itself is already a lot, because English is pretty much everywhere.
|
||||
|
||||
So maybe there are other people out there where English (or any language) just happened to them, but I’m definitely not one of those people. A few takeaways: 1) surprise, I’m not the genius that I thought I was (/s I never thought of myself as a genius, but I do overestimate myself sometimes as evidenced by this phenomenon), 2) I’ve always said “I learned French for one year” but it’s not really a year; looking back, I only spent 8 hours in a class each week, roughly a few hours per week after that. It’s definitely not a year and it is definitely not enough to get me to fluency in the near future given my learning rate.
|
||||
|
||||
On one hand, it’s sad news that it turns out I haven’t really put much work on French as much as I thought I was. On the other hand though, this realization gives me a better idea on what to do: I need to put in the work, which means my desire to be fluent in French is not a lost cause—well, as long as I’m willing to put in the work.
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
layout: article
|
||||
title: La Loberia
|
||||
date: 2021-11-29
|
||||
category: "travel"
|
||||
---
|
||||
|
||||
After spending an hour and a half watching sea lions chasing each other in La Loberia, Paco—my naturalist guide—and I walked back to the tiny parking lot where his car was parked. La Loberia would be my last stop for the day. Realizing that I didn’t have enough small money for tips, I told him that I wanted to get some snacks although I actually didn’t want to, just so that I could get some smaller money as changes.
|
||||
|
||||
“What’s your favorite snack?” I asked.
|
||||
|
||||
He pointed to a local Ecuadorian banana chips snack that sits on the top shelf of the counter. “It’s very sweet,” he said, which sounded like a warning to me because I had been avoiding sweets for months at that point.
|
||||
|
||||
I got myself two packs of banana chips—one for me, one for him—and a bottle of Coca Cola. I was planning to bring them to my hotel—I would be leaving San Cristobal first thing in the morning tomorrow and I had written in my notebook that by 4pm, I would be at my hotel and by 5pm I would have to start packing. As I made my move towards the car in a haste, he motioned to a small table and a couple of chairs nearby, placing his chips on the table.
|
||||
|
||||
He dragged two chairs closer to the table. “No rush.”
|
||||
|
||||
No rush. What a strange, foreign concept.
|
||||
|
||||
We talked about life in the Galapagos Islands as we munched on our banana chips (which were very sweet, by the way)—how life is very slow in the Galapagos Islands and how the locals love their siestas. I told him I don’t even remember the last time I spent a time like this. I always had something to do, somewhere to go, some box in my to-do list that I need to check off—and even during my holiday, I still have a to-do list.
|
||||
|
||||
As I went on a rant about how I used to spend three hours commuting in Jakarta, I would interject a couple of times, like a broken cassette, about how wonderful the weather was. The sun was just beginning to set and the parking lot was showered in this warm, golden glow. It felt like something so novel, but was it really? I couldn’t help but wonder how many sunsets with the same hue that I’ve seen before but I have no memory of, simply because I was never really present.
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
layout: article
|
||||
title: On adventures
|
||||
date: 2022-04-13
|
||||
category: "travel"
|
||||
---
|
||||
|
||||
Hello friends. It's been a long, long time.
|
||||
|
||||
This week is a short week. We have a day of rest on Monday (which honestly didn't feel like a day of rest) and it's Good Friday this week. Many coworkers are out of office and jet-setting somewhere else; Thailand, Bali, Australia, you name it. March has been crazy for me so I didn't even realize we have a short week until last week and it was almost too late to arrange everything even if it's just a quick weekend getaway. Yes this is such a surprising statement coming from someone who came up with a bucket-list South America trip in 1.5 weeks, I'm very well aware of that _merci_.
|
||||
|
||||
The trigger for this post, I guess, was a coworker who asked me yesterday: "you're not going anywhere? It's a short week."
|
||||
|
||||
"I wish," I said, and oh I really wish I was on a flight somewhere. Or was I?
|
||||
|
||||
---
|
||||
|
||||
I'm not sure when it started but I always, always have this nagging feeling that I have to make an adventure out of my life. In the past few years I've been slowly learning that it's really the driving force of everything that I do. And not only that, but I always feel like I'm pressed with time. Like I have to do it now and I have to do everything _now_ and _ohmygodmytimeisrunningoutwhatthefuck_.
|
||||
|
||||
(I know it's dramatic, but in all fairness, when you've lost people in your life, I guess it's really hard not to be dramatic.)
|
||||
|
||||
While waiting for my scripts to compile, I tried to list down some things I've done that I considered adventurous in my books: sleeping in airports. Eating silkworms in Siem Reap and eating snails in Marrakech. Solo traveled to one of the most remote archipelagos in the world. Biking alone at 4am in Myanmar looking for a sunrise spot. Okay, okay - a lot of these things are not *that* adventurous compared to people who have, say, biked or sailed all around the world. But they still feel pretty adventurous for me & I'm not sorry.
|
||||
|
||||
Anyway. It's hard for me not to associate _adventures_ with _travels_, but on my way home from the office, I was wondering if there are adventures _outside of_ travels. The reason why I'm asking this question is right now for me it's not realistic to count on travels. Nowadays my travels are pretty much limited by how many days off I can take--something that I used to not have to worry about because my previous workplace pretty much didn't care how many days I took off, but I did trade this for a good career opportunity. And lately, I also realized that I don't want to _always_ travel anyway: sometimes I long for quiet days at home, reading books while drinking hot chocolate after grocery shopping. Heck, sometimes I long for an entire day that I can use to thoroughly clean my place and prep my salad and smoothies in peace. I'm also learning new musical instruments and I have fitness goals to keep up with, both of which are impossible to maintain if I'm always traveling. I have a two-week vacation coming up and I'm already low-key freaking out about missing my music lessons. But at the same time, I can't deny that I'm also constantly craving for adventures, whatever that is.
|
||||
|
||||
Has it always been like this? I tried to backtrack and the answer is: I don't think so.
|
||||
|
||||
I grew up as a really sheltered kid, and by sheltered I mean it literally. I've never ventured alone 500 meters away from my house up until when I was in the last year of middle school. My parents were rarely around and I spent most of the time with my grandma, which means I had to be home all the time because otherwise who is going to supervise me and pick me up from my friend's place? Going outside of the house was such a headache that I'd rather not try to deal with it. Honestly I'm surprised that I grew up without a vitamin D deficiency because I'm pretty sure the Cullens went outside of the house much more often than I was when I was a kid.
|
||||
|
||||
The first time I got out of my bubble was when my grandma left the city and I lived alone and somehow I decided to walk to a mall 1 km away from my house. This on its own was already an accomplishment, but I also hung out with some _ojek payung_ and chatted with them. For some reason, it felt like a great adventure. Both - walking far by myself and talking to people I don't know - have something in common: they were something new to me, and they scared the shit out of me.
|
||||
|
||||
On my now-defunct blog, I found this post from 2012:
|
||||
|
||||
> A piece of advice, if you have nothing to do try to walk 1 km from where you are now and write down/take pictures of what you discover.
|
||||
|
||||
I've always heard the phrase that life is too short for us to not go on adventures, but I never really realized that by waiting for big adventures in the traditional sense, you're practically wasting the hours in between your big adventures. These are the adventures that you can use to go on smaller, maybe less-traditional, less-literal adventures.
|
||||
|
||||
But at the same time, I also believe that it doesn't mean that you should be always on. Rest days, just like when you're training for a 10K or a marathon, are just as important - when done well, rest days make you a better runner. And in a similar manner, rest days make you a better adventurer. Besides, if you go on adventures all the time, at some point all of these adventures will wear off their novelty and going back to a stable routine will become another adventure on its own. If there's one thing I learned lately, in a world where for some people adventures are more reachable, from low cost carriers to having any kind of information in your fingertips, is that stability is hugely underrated.
|
|
@ -0,0 +1,123 @@
|
|||
---
|
||||
layout: article
|
||||
title: 2022 reading retrospective
|
||||
date: 2022-12-30
|
||||
category: "reading"
|
||||
---
|
||||
|
||||
Hello again, friends.
|
||||
|
||||
Last year, I wrote my first 2021 reading retrospective and noted down quite a lot of things I wanted to achieve this year reading-wise. I figured those notes might be a good way to start off this post before I delve deeper into this year's stand-outs (both good and bad).
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
"I hope to be consistent with reading at least 52 books a year." Oh well. This year I read a total of 48 books which is not too shabby. I was actually even far ahead at some point. I started listening to audiobooks which I usually do when I'm doing chores or taking a long walk at night. I also have a dedicated reading time every day at 9 pm which is honestly my favorite part of the day.
|
||||
|
||||
However, missing my 52 books per year target did trigger me to rethink this objective, because honestly it doesn't bother me as much as I thought I would. What actually bothers me is how much information I actually retain from the books I've read over the past few years, as illustrated by this conversation from my visit to the bookstore with my friend a few weeks ago:
|
||||
|
||||
Friend: *picks up a book from the bookshelf*
|
||||
|
||||
Me: Oh yeah, I think I've read this book before.
|
||||
|
||||
Friend: What is it about?
|
||||
|
||||
Me: Oh honestly, I don't remember a single thing about it.
|
||||
|
||||
Or this conversation with my coworker:
|
||||
|
||||
Coworker: Yeah you should read _The Defining Decade_. There is this story about... [proceeds to tell story]
|
||||
|
||||
Me: Oh yeah I'll add it to my list! *opens Notion* Oh wait. I actually already read this book in 2019.
|
||||
|
||||
I've long accepted that I'm not going to retain 100% of the information I've read, and I'm not going to let that stop me from reading, but it has gotten to the point where it gets a tad embarrassing for me.
|
||||
|
||||
Another thing I talked about on last year's post is how my 2021 books were mostly authored by white men and women. I think I immensely improved on this front this year and surprisingly rather effortlessly since I didn't have any specific list whatsoever. I feel like the more I started reading more diverse books, the more I naturally gravitated towards them because I realized that it's easier for me to relate to the stories, issues, and characters' perspectives.
|
||||
|
||||
Genre wise, I don't think this year's list was dominated by a particular theme. I did read quite a few investigative journalism books but not as many as I'd like. I read fewer tech books in 2022, because who needs to read a sensational, juicy tech tell-all book when you're currently living in the middle of one? :) I also ended up not reading many horror or sci-fi books—I already solicited some horror recommendations from my horror-loving friends, and I remember attempting to read Stephen King's _The Stand_ sometime in the middle of the year, but I just couldn't get into it somehow. I still want to give it a shot, though.
|
||||
|
||||
I haven't figured out a way to take notes of the book I was reading; what I did in 2022 was to highlight my favorite passages, take pictures of them, and let them sit around in my Google Photos unorganized.
|
||||
|
||||
Now, some stand-outs from this year's reading:
|
||||
|
||||
## **Fiction**
|
||||
|
||||
One of the most common hallmarks of a good book is how much of a page-turner it is, but I feel like it's no longer valid for me. Over the years I've read some books that I couldn't put down only to forget about it a few days later. So now, for fiction, I know that I've read a really good one when even weeks or months later I can still vividly recall the scenes in my head (another green flag is that I would want to read other books by the author stat).
|
||||
|
||||
**Gabrielle Zevin's _Tomorrow, Tomorrow, and Tomorrow_**
|
||||
|
||||
I read this a few days after it was published because the synopsis kind of reminded me of a more modern and youthful _Halt and Catch Fire_. As a college student in the mid 2010s, I was also one of those kids who dreamed of having a start-up in the garage with her friends (and did try, but unlike the characters in the book, I failed without even taking it off the ground), so the premise did speak to me. Now, I didn't know how popular this book on the online sphere until yesterday when I was at a bookstore and I casually told my friend, "hey this book is really good, you know" and she was all like, "yeah everyone online is talking about it". :D If that's the case, then the hype is really well-deserved. Video games is a big part of the book, but being a non-gamer myself I don't find this to be an issue. I chose to see it more as a character study instead of a plot-driven book anyway. You can focus on the plot if you want to because a lot of things did happen, but I had much more fun reading how the characters' reacted to the events that happened in the book and how they processed them.
|
||||
|
||||
**Xochitl Gonzales' [[Olga Dies Dreaming]]**
|
||||
|
||||
There are a lot of things going on in this book and it could be overwhelming at times, but I still enjoyed it through and through. For a book that touches on many different issues—power, privilege, gentrification, activism, among many others—I found the plot to be compelling and it didn't feel like the plot was written just for the sake of discussing all of these issues. The social criticisms that the book brings up were woven into the story effortlessly and the characters are complex and layered. It's not an easy feat to make a point about various social issues without turning the characters into a caricature of the holier-than-thou trope instead of a three-dimensional person with all of their mistakes and flaws.
|
||||
|
||||
**Sequoia Nagamatsu's [[How High We Go in the Dark]]**
|
||||
|
||||
For a book that takes place in the middle of a plague (albeit years into the future), _How High We Go in the Dark_ is probably not a book that one would call comforting but somehow it is for me. Despite the bleak subject matter (worldwide plague! Deaths! Criticism on capitalism! Generational trauma!), it is profoundly compassionate and humane. The book has a common thread (the plague) connecting all the stories. What impresses me is that this thread does not limit the imagination that goes into the short stories. The first and the final short story in the book are vastly different in settings, but they still manage to come full circle, which I find beautiful.
|
||||
|
||||
**Jennifer Egan's [[The Candy House]]**
|
||||
|
||||
I remember the first time I read Jennifer Egan's _A Visit from the Goon's Squad_, I was in high school and I was so awed by the storytelling (all the PowerPoints!) and the characters to the point where I did many rereads. Roughly a decade later, _The Candy House—_which is actually the loose sequel of _A Visit from the Goon's Squad—_left the same mark on me.
|
||||
|
||||
At the center of the story is Own Your Unconscious, a new technology where people can share and replay memories _and_ also access the memories of others who agree to be part of the technology. While at first this sounds like a kind of technology that is still far away from our present, if you think about it, some form of it already kinds of exist in the form of social media. Haven't we been uploading our pictures, thoughts, feelings, relationships to the Internet anyways? You can even say that Own Your Unconscious is pretty much social media on steroids.
|
||||
|
||||
_The Candy House_ is not an easy read by any means for many reasons. Just like _A Visit from the Goon's Squad_, there are many characters to keep track of, the stories are written from various POVs with different writing styles and they do not seem to be interconnected at first, and the timeline spans decades and moves back and forth. But I personally feel the book is worth the read, simply for the many questions about memory, authenticity, and human connections that it raises. It's not going to feed you with a lot of answers if at all though, so if you're looking for definitive answers to your burning questions about our world that is undeniably shaped by technology at a rapid pace, it's probably not for you.
|
||||
|
||||
## **Non-fiction**
|
||||
|
||||
**Lulu Miller's _Why Fish Don't Exist_**
|
||||
|
||||
There is no greater joy in the world more than reading a book without any expectation only to end up spending hours reading it in one sitting with the widest grin on your face because of how damn good the book you're reading is.
|
||||
|
||||
I didn't know what to expect when going into Lulu Miller's Why Fish Don't Exist, and even after reading it, I still don't know which shelf I should put this book on. Is it a biography? Is it a scientific book? Or is it a mystery book? Heck, I don't know. And I don't care. I've got to be honest, though: the main reason why I was literally surprised by this book is mainly because I wasn't familiar with the subject matter of the book. Otherwise, I'd probably not be as surprised, but regardless of your familiarity of the subject matter, I'd still recommend giving this book a shot.
|
||||
|
||||
**Ann Pratchett's [[These Precious Days]]**
|
||||
|
||||
_The Dutch House_ was one of my favorite 2020 reads, so I was ecstatic to discover that she has a book of essays titled _These Precious Days_ that were written during the pandemic. Here's the thing: I have a complex relationship with personal essays. For most of the ones I've read, I can tell that they are well-written, but oftentimes I feel I should hardly care unless it's something personal to me. But when I finish reading the book, I feel like I want to read Ann Practhett's thoughts on everything, even if it's something I cannot really relate to at all.
|
||||
|
||||
**Vincent Bevins' _The Jakarta Method_**
|
||||
|
||||
At some point this year, my friends and I were talking about how Indonesia and Latin America countries are similar in a lot of ways. One of the things we shared was our dark history of anti-communist mass killings, which was kicked off by the Indonesian mass killings in the 60s (hence, "The Jakarta Method"). As an Indonesian myself, I'm no stranger to this part of our history—although it did take some time for me to get to this point, because even half a century later, I still grew up with all the propaganda and it's probably still the case for today's generation of students—but I have never realized its ripple throughout the world and how interconnected a lot of these events were until I picked up _The Jakarta Method_. The book does not only collect and recite historical facts, but it also contains many interviews with and personal accounts of the survivors affected by these series of deceits, propaganda, and mass killings. It's a depressing read because of the harrowing materials: some people really would go to such lengths to protect the status quo, even if it means ruining other countries to the brinks and hurting innocent lives who just wanted a more equal world. And as an Indonesian, it's an even more depressing read because the wealth inequality and the myriad other issues that Indonesians are still dealing with today can be pretty much traced back to these atrocities and war crimes. I remember reading this book at the airport and at one point I just slumped in my seat motionless as I processed what I've just read and reflected on all the human potentials lost. But this book is a very, very important one. If I could pick the most important book that I read this year, this would be it.
|
||||
|
||||
**Daniel Immerwahr's _How to Hide an Empire_**
|
||||
|
||||
Being a self-proclaimed geography nerd, well sure I can recite the US territories off the top of my head, but I never actually really knew what does a "US territory" mean and how they came to be. And oh did I learn a lot from this book. As recent as 1945, the US claimed jurisdiction over more people living outside the US than inside the US—how wild is that? Another important thing I learned is how modern technology helped redefine what an "empire" means: planes, radio communication, and various other technologies pretty much played a big role in enabling the US to build these pointillist empires made up of military bases and airfields, instead of the "traditional" definition of building an empire by way of territorial expansion. This book reminds me that technologies—whether they are existing or still in development—do play a part in shaping our political landscape in the future, which includes the kinds of imperialism that hides in the background and does not conform to its own traditional definition.
|
||||
|
||||
**Elena Ferrante's _In the Margins: On the Pleasures of Reading and Writing_**
|
||||
|
||||
It's a short but dense book that provides glimpses of Elena Ferrante's writing process, thoughts on reading, and answers to questions such as what writing means to her. I don't have much to say because otherwise I'd just butcher the message, but this is definitely a must read for aspiring writers and readers who enjoy Elena Ferrante's books.
|
||||
|
||||
## Next year
|
||||
|
||||
As I have written previously, my biggest issue with reading right now is facing the uncomfortable truth that I barely retain any information that I get from the books I'm reading. Therefore my sole focus for next year would be applying reflective reading.
|
||||
|
||||
What reflective reading means for me is that I would take the time to slow down, process the words I have just read, note down questions (even without answers) and thoughts as inconsequential as they might be, and summarize them at the end of my reading journey. I don't think this is going to be easy because I fully recognize my tendency to quickly move from one book to the next. After all, there are so many great books in this world and so little time! But if I want to be better at retaining all the information and knowledge I learn, this is definitely something I'm willing to give a shot. We'll see how it goes!
|
||||
|
||||
## Bonus: favorite quotes
|
||||
|
||||
From **Ann Pratchett's _These Precious Days_**:
|
||||
|
||||
"She had managed to peel off other people's expectations in order to see what a life that was entirely her own could look like. It looked like the natural world."
|
||||
|
||||
"How I came not to care about other people's opinions is something of a mystery even to me. I was born with a compass. It was the luck of my draw. This compass has been incalculably beneficial for writing—for everything, really—and for that reason I take very good care of it. How do you take care of your internal compass? You don't listen to anyone who tells you to do something as consequential as having a child. Think about that one for a second."
|
||||
|
||||
"People want you to want what they want. If you want the same things they want, then their want is validated. If you don't want the same things, your lack of wanting can, to certain people, come across as judgment."
|
||||
|
||||
"I came to understand that grief can go underground and that feelings can hide other feelings."
|
||||
|
||||
## Bonus: reading playlist
|
||||
|
||||
I have a playlist for literally _everything_ and reading is no exception.
|
||||
|
||||
- Romance II - Max Richter from the My Brilliant Friend Season 3 soundtrack
|
||||
- Sub Piano (MBF) version - Max Richter from the My Brilliant Friend Season 3 soundtrack
|
||||
- Spinning - Jon McLauhglin
|
||||
- The Long Ride II - Devonte Hynes from the We Are Who We Are soundtrack
|
||||
- Goodbye Lenin! - Yann Tiersen from the Goodbye Lenin! soundtrack
|
||||
- La ritournelle - Sébastien Tellier, a classic lemme tell ya
|
||||
- Fiction - Belle and Sebastian from the Storytelling soundtrack
|
||||
- Knight Moves (Solo Piano Version) - Chilly Gonzales
|
||||
- Waves Crashing on Distant Shores of Time - Clint Mansell from the Black Mirror: San Junipero soundtrack
|
||||
- Duet (Instrumental) from the Stoker soundtrack
|
||||
- Harmony of Difference - EP - Kamasi Washington
|
||||
- Lady Bird - Jon Brion from the Lady Bird soundtrack
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
layout: article
|
||||
title: Book discovery sans Goodreads
|
||||
date: 2022-12-25
|
||||
category: "reading"
|
||||
---
|
||||
|
||||
I got rid of my Goodreads account sometime in 2022. Sure, there were some downsides to not having Goodreads: I track my to-read books (and read books) on Notion which is getting clunkier each day and so adding a new entry is not as easy as clicking a button on Goodreads.
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
Getting recommendations is also another tricky thing. Not being part of Goodreads, bookstagram, and booktok means I'm not getting fed book recommendations by algorithms. As a consequence, I have to go out of my way (sometimes quite literally) because I don't have a centralized place to get my recommendations from. This is how I find books to read nowadays in no particular order:
|
||||
|
||||
- [r/books](https://reddit.com/r/books)
|
||||
- I'd go to the library or the bookstore, randomly pick books that catch my eye, and either borrow it or note it down so I can borrow it via Libby later. This has led me to some exciting discoveries, such as when I found the [annotated edition of _Wuthering Heights_](https://www.hup.harvard.edu/catalog.php?isbn=9780674724693) in the library.
|
||||
- Libby. The Libby app has a "popular" and "skip-the-line" section that I like to browse from time to time when I don't know what I want to read.
|
||||
- Recommendations from friends. Sometimes I ask for explicit recommendations, sometimes I'd just ask casually, "are you reading anything at the moment?". Surprisingly though most of the time I don't even have to ask! Usually when I'm talking to friends who also likes to read, this would come up naturally in the middle of our conversation. I got a recommendation for _The Artist's Way_ from my colleague who's also an artist when we were talking about art over lunch. Or when I was doing Secret Santa this year with some friends, one of us gifted some books by Mahmoud Darwish and that's how I found out about him. I find this very refreshing because it just feels more personal than just watching my friends' reading progress on Goodreads from afar. This way I also get to learn more about my friends, since I get to ask them questions such as why do they find it interesting or important? Why do they recommend this book to me in particular?
|
||||
|
||||
I still read reviews of the books I found at the library/bookstore just to make sure that it's not a complete dud. But I put less weight on online reviews now than I used to when I still had my Goodreads account.
|
||||
|
||||
Yes, it is time-consuming and not as convenient as getting your recommendations from algorithms. But for me, at least at this phase of my life where I just want to spend less time staring at the screen, I do enjoy it. It forces me to go out and talk to people which was something I wanted to do more last year and would like to continue doing.
|
||||
|
||||
Before I move on, I would like to leave a side note that I'm not dismissing algorithms and the overall Goodreads/booktok/bookstagram/book influencers sphere at all. It is how I used to find a wide range of books outside of the genres I was used to, and just like everything else in this world, I really found them useful when used in moderation. I can't deny that social media has given a platform for the rest of us who are not NYT writers or part of the majority to talk about the books that they enjoy and they find important. I went to the bookstore yesterday and my heart bloomed when it dawned on me that there were so many books from different parts of the world talking about various issues displayed on the shelves; 10 years ago, these shelves used to be dominated by crime trilogies set in the North a la _The Girl with The Dragon Tattoo_ trilogy (which, make no mistake, I did like) and your only choices for translated Japanese authors were limited to Haruki Murakami and Banana Yoshimoto. There is no doubt for me that social media plays a huge part in pushing this much-needed shift, and I'm grateful for it.
|
|
@ -0,0 +1,50 @@
|
|||
---
|
||||
layout: article
|
||||
title: Fisherman's Trail, Day 0 - Lisbon to Porto Covo
|
||||
date: 2023-09-29
|
||||
category: "fisherman's trail"
|
||||
---
|
||||
|
||||
Three months ago, I walked the Camino Portuguese, relieved that I made it but also a bit sad that it was over. While the first days were grueling, the final days flew by so fast even though they were mostly longer, more challenging days.
|
||||
|
||||
<!-- excerpt -->
|
||||
|
||||
At some point, I got myself used to the rhythm and I had my camino routine before I knew it. On Day 5 of my Camino Portuguese, I knew that I would be doing another long-distance thru hike again, and here I am: my flight to Lisbon leaves in a couple of hours!
|
||||
|
||||
A lot of things have happened since then, so it will be interesting to see how this journey will be like. Physically, I feel stronger; I figured out a more consistent workout routine and managed to keep up with it for these past three months, but I don't want to jinx it either. Mentally, I feel like I’m simultaneously underprepared and over-prepared; this time, I know better what to pack (sand gaiters) and to not pack (heavy locks!), but at the same time the thought about whether my shoes will withstand the sand or not keeps me up at night. I’m worried about not bringing trekking poles with me. There were many last-minute changes, too: I was tempted to bring my paperback copy of _The Dawn of Everything_, but decided to settle with my Kobo instead.
|
||||
|
||||
The people in my life who know about this trip always told me: "you're going back to Portugal _again?_" and yes, yes, I was surprised at myself. I used to avoid revisiting the same countries, let alone the same cities. But I found myself revisiting the same cities multiple times this past year: Penang, Bangkok, and now... Portugal. Different parts, but still. I don't have the perfect answer to this question, but one thing I knew is, ever since I moved to Europe, I've been strongly drawn to the sea (ha, now that I'm pretty much not surrounded by it anymore!). I was bummed to miss the chance of doing the coastal Camino Portuguese, so I knew that my next long-distance hike would definitely have to be a coastal trail. I had a few options in mind, but the Fisherman's Trail seems to be the one that makes the most sense... and so here I am.
|
||||
|
||||
---
|
||||
|
||||
The bus from Lisbon to Porto Covo took two hours. I made it to the bus straight from the airport, but I was cutting it close. I arrived in Porto Covo at 2, not having had a proper lunch, so I was out for lunch at a weird hour because I was starving.
|
||||
|
||||
I miss the pilgrim menu already. I remember one of the first times I ordered a pilgrim menu, it was about 12 euros for a three-course meal. I had to stop sending them food sometimes because it was just too much! Plus, the good thing about the pilgrim menu is I don't have to think about what I want to order.
|
||||
|
||||
I just ordered something for 15 euros, which seems to be a pretty steep price, but it’s okay. I’m still not sure how the food situation will look like on this trail. This being a coastal trail, I’ll have to savor all the seafood, and I missed my chance on trying out Portuguese cuisine when I was here three months ago, so I would forgive myself for splurging a little bit sometimes. But I think I’m most likely going to have to cook whenever I have kitchen available, a simple spaghetti will do.
|
||||
|
||||
![[lunch.jpg]]
|
||||
|
||||
Porto Covo is a small fishing town; there are tourists, of course, but it feels way less crowded than the towns I visited when I did the Camino Portuguese so far.
|
||||
|
||||
![[empty-street.jpg]]
|
||||
|
||||
I wasted no time and headed to the beach(es) after a short rest. There are three or four beaches in proximity to my hotel, and I went to the nearest one, but not before a quick sketch of the lighthouse.
|
||||
|
||||
![[Field Notes/Images/Fisherman's Trail - Day 0/sketch.jpg]]
|
||||
|
||||
At the beach I laid down my towel and spent an entire hour reading my book. My soundtrack for today was Lorde's _Solar Power_, which was perfectly apt for the sunny, spotless blue sky.
|
||||
|
||||
![[two-people.jpg]]
|
||||
|
||||
![[waves.jpg]]
|
||||
|
||||
![[beach.jpg]]
|
||||
|
||||
![[houses.jpg]]
|
||||
|
||||
![[ocean-view.jpg]]
|
||||
|
||||
I lounged around the beach until the sun was starting to set and the cold started settling in, but it wasn't time to go home yet. On the clifftop I found a spot to watch the sunset and so I did. I don't remember when was the last time I spent time in the sea, maybe Bali last year? I was never a beach person in particular, but this just feels so right. I'm so, so excited to be spending the next 12 days on the coast. The sceneries I've seen today have been fantastic, and I haven't even started the hike yet!
|
||||
|
||||
![[sunset.jpg]]
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
layout: article
|
||||
title: Using Eleventy to build a static site
|
||||
date: 2022-02-14
|
||||
category: "cat1"
|
||||
---
|
||||
|
||||
Having landed on this Eleventy starter, you probably are no stranger to Eleventy. But if you are, you should definitely check out its benefits. Getting started with Eleventy is quick and easy.
|
||||
<!-- excerpt -->
|
||||
|
||||
<img src="https://images.unsplash.com/photo-1555066931-4365d14bab8c" alt="A laptop with some lines of code on the screen" />
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
layout: article
|
||||
title: A slightly more advanced Eleventy website
|
||||
date: 2022-03-02
|
||||
category: "cat2"
|
||||
---
|
||||
|
||||
With Eleventy you can gradually expand your website and its complexity level.
|
||||
<!-- excerpt -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
layout: article
|
||||
title: Why I chose Eleventy for my static website
|
||||
date: 2022-05-04
|
||||
category: "cat1"
|
||||
---
|
||||
|
||||
There are many different static site generators out there, but after having used middleman for such a long time, it just made sense to switch to Eleventy. I needed something simple that gave lots of control over how I build my website.
|
||||
<!-- excerpt -->
|
25
src/index.md
25
src/index.md
|
@ -1,29 +1,10 @@
|
|||
---
|
||||
layout: page
|
||||
layout: home
|
||||
eleventyNavigation:
|
||||
key: home
|
||||
order: 1
|
||||
---
|
||||
|
||||
# Welcome
|
||||
This starter will help you build a relatively simple blog with a few key features, while using the Eleventy static site generator.
|
||||
I’m an Indonesian machine learning engineer, [street & travel photographer](https://galuh.myportfolio.com) and [sketcher](https://instagram.com/gal.ts.art) currently based in Berlin, Germany. I spent a couple of years in Singapore working as a software engineer at Twitter. Prior to that, I worked as a data scientist at Gojek, building & shipping various data/machine learning systems.
|
||||
|
||||
This eleventy starter already includes:
|
||||
- Basic site navigation with eleventy-navigation
|
||||
- Blog categories & category based navigation
|
||||
- Image optimisation with Eleventy-img
|
||||
- SVG icons with Eleventy-plugin-icon
|
||||
- SEO (sitemap, metadata, robots.txt)
|
||||
- RSS feed
|
||||
- Luxon for handling dates & times
|
||||
- A few basic Eleventy configurations, filters and shortcodes
|
||||
- Nunjucks templates
|
||||
- Sass & the necessary scripts to compile Sass
|
||||
|
||||
<br>
|
||||
|
||||
You can find the <a href="https://github.com/Mangamaui/eleventy-not-so-minimal-blog-starter" target="_blank">source code on GitHub</a>.
|
||||
|
||||
<br><br>
|
||||
|
||||
If the listed setup is not what you require, you might want to check out one of the many other Eleveny starters, which can be found here: [Eleventy Starter Projects](https://www.11ty.dev/docs/starter/).
|
||||
I enjoy collecting experiences & knowledge, & I’m mostly driven by a boundless (and sometimes foolish) curiosity & desire to make sense of the world so that I can solve the problems that I’m interested in. The dots might not connect now but I believe (or hope) that someday they will.
|
Loading…
Reference in New Issue