-
-
-
-{{< /rawhtml >}}
-
diff --git a/content/post/_index.md b/content/post/_index.md
index a3fe8c1..78ade06 100644
--- a/content/post/_index.md
+++ b/content/post/_index.md
@@ -1,6 +1,11 @@
+++
-aliases = ["posts", "articles", "blog", "showcase", "docs"]
-title = "Posts"
-author = "Salar Rahmanian"
-tags = ["index"]
+paginate_by = 4
+path = "/post"
+title = "Articles"
+sort_by = "date"
+template = "section.html"
+insert_anchor_links = "left"
+
+[extra]
+show_previous_next_article_links = true
+++
diff --git a/content/post/all-good-things-come-to-an-end.md b/content/post/all-good-things-come-to-an-end.md
index c524efc..c5379c9 100644
--- a/content/post/all-good-things-come-to-an-end.md
+++ b/content/post/all-good-things-come-to-an-end.md
@@ -1,24 +1,18 @@
+++
title = "All Good Things Come to an End"
-date = 2021-04-14T12:03:44-07:00
description = "After having spent the last seven years organizing technical talks at several meetups I have decided to step down and move on."
-featured = false
-draft = false
-toc = false
-featureImage = ""
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 30
-codeLineNumbers = false
-figurePositionShow = false
+date = 2021-04-14T12:03:44-07:00
+
+[taxonomies]
+tags = ["meetup", "conference", "talks"]
+categories = ["Announcements"]
+
+[extra]
+toc = true
keywords = ["meetup", "conference", "technical talks", "events", "organizer"]
-tags = ["meetup", "conference", "technical talks"]
-categories = ["meetup", "conference", "technical talks"]
+++
-**Update:** Since writing this blog I have re-started arranging some meetups again. **For details visit: [Current Meetups I am organizer for]({{< ref "resume.md#current-meetups" >}})**
-
-{{< youtube 1CU5UPi7STk >}}
+{{ youtube(id="1CU5UPi7STk") }}
After having spent the last seven years organizing technical talks at several meetups I have decided to step down and move on. It is an end of an era for me, but I am excited about what's next.
@@ -57,5 +51,3 @@ Keep in touch all, lets get together sometime for a happy hour (be it virtual or
Thank you 🙏🍷 All !
-### [Subscribe to my newsletter](https://notes.softinio.com)
-
diff --git a/content/post/announcing-my-new-site-for-great-technical-video-content.md b/content/post/announcing-my-new-site-for-great-technical-video-content.md
index 45f1267..ebb6267 100644
--- a/content/post/announcing-my-new-site-for-great-technical-video-content.md
+++ b/content/post/announcing-my-new-site-for-great-technical-video-content.md
@@ -1,19 +1,15 @@
+++
title = "Announcing My New Site for Great Technical Video Content"
-date = 2021-11-22T18:07:52-08:00
description = "I am thrilled to announce my new video website watch.softinio.com, a place for great technical talk content ad free and free from commnercial sponsorship."
-featured = true
-draft = false
-toc = false
-featureImage = "/img/SF1.jpg"
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 30
-codeLineNumbers = false
-figurePositionShow = false
+date = 2021-11-22T18:07:52-08:00
+
+[taxonomies]
+tags = ["video", "meetup", "conference", "talks"]
+categories = ["Talks", "Announcements"]
+
+[extra]
+toc = true
keywords = ["youtube", "PeerTube", "technical talks", "events", "conference", "meetup", "video", "virtual talks", "scala", "neovim", "kafka", "nifi", "spark", "java", "python", "Swift"]
-tags = ["video", "meetup", "conference", "technical talks"]
-categories = ["video", "meetup", "conference", "technical talks"]
+++
#### Announcing [watch.softinio.com](https://watch.softinio.com)
@@ -30,7 +26,7 @@ This site is powered by [PeerTube](https://joinpeertube.org/) a decentralized al
I will be producing a lot of new content of my own here, including doing some live streams. Some of this of course, will also be made available on my [YouTube channel](https://softin.io/youtube).
-{{< peertube id="e7548279-6a4c-46ae-80ed-5d434bb86f53" title="0" >}}
+{{ peertube(id="e7548279-6a4c-46ae-80ed-5d434bb86f53") }}
#### Can I post my content on your site?
diff --git a/static/img/via/Screen-Shot-2018-08-10-08-56-19.png b/content/post/announcing-sfbayareatech/announcing_sfbayareatech.png
similarity index 100%
rename from static/img/via/Screen-Shot-2018-08-10-08-56-19.png
rename to content/post/announcing-sfbayareatech/announcing_sfbayareatech.png
diff --git a/content/post/announcing-sfbayareatech.md b/content/post/announcing-sfbayareatech/index.md
similarity index 95%
rename from content/post/announcing-sfbayareatech.md
rename to content/post/announcing-sfbayareatech/index.md
index f265fed..07853e6 100644
--- a/content/post/announcing-sfbayareatech.md
+++ b/content/post/announcing-sfbayareatech/index.md
@@ -1,11 +1,15 @@
+++
title = "Life changes and announcing SFBayAreaTech"
-date = 2018-08-10T07:29:10-07:00
description = "Me and family moved, I changed jobs and announcing SFBayAreaTech a slack community for anyone working in tech who are based in the San Francisco Bay Area California"
-draft = false
-keywords = ["sfbayareatech", "slack", "community", "san francisco", "bay area", "california"]
+date = 2018-08-10T07:29:10-07:00
+
+[taxonomies]
tags = ["sfbayareatechies"]
-categories = ["general"]
+categories = ["announcements"]
+
+[extra]
+toc = true
+keywords = ["sfbayareatech", "san francisco", "bay area", "california"]
+++
#### Update: Since writing this blog, I have changed jobs and SFBayAreaTech has changed to ####
@@ -20,7 +24,7 @@ At Mya we are building an A.I. recruiting assistant. I am pretty excited about t
On to my goal of meeting everyone in tech and making some friends I have been going to a lot of tech meetups and conferences since arriving in San Francisco and I'm loving the learnings and networking. I even am co-organizer for two meetups already in the bay area [SF Scala](https://www.meetup.com/SF-Scala/) and [Elasticsearch San Francisco](https://www.meetup.com/Elasticsearch-San-Francisco/). I have met some great people including key contributors to many open source projects and tech celebrities that I have followed for years that I finally got the chance to meet in person (see if you recognize any of them in the pictures below):
-![Tech celebrities](/img/via/Screen-Shot-2018-08-10-08-56-19.png)
+![Tech celebrities](announcing_sfbayareatech.png)
One thing I noticed though, was that it was difficult to stay in touch with everyone. I mean we are all busy aren't we after all. I thought how can I improve this. I realized I keep in touch with people at work really well by using Slack. So I thought, wouldn't be nice to have a slack for everyone else in Tech who have any kind of affiliation to San Franscisco Bay Area? Thinking more about this I thought this would make things easier as we already have slack on our laptops and phones for work so adding another slack workspace is easy.
diff --git a/static/img/akka_actor_system_design.png b/content/post/introduction-to-akka-typed-using-scala/akka_actor_system_design.png
similarity index 100%
rename from static/img/akka_actor_system_design.png
rename to content/post/introduction-to-akka-typed-using-scala/akka_actor_system_design.png
diff --git a/static/img/akka_logo.svg b/content/post/introduction-to-akka-typed-using-scala/akka_logo.svg
similarity index 100%
rename from static/img/akka_logo.svg
rename to content/post/introduction-to-akka-typed-using-scala/akka_logo.svg
diff --git a/content/post/introduction-to-akka-typed-using-scala.md b/content/post/introduction-to-akka-typed-using-scala/index.md
similarity index 96%
rename from content/post/introduction-to-akka-typed-using-scala.md
rename to content/post/introduction-to-akka-typed-using-scala/index.md
index d0a5930..33be64e 100644
--- a/content/post/introduction-to-akka-typed-using-scala.md
+++ b/content/post/introduction-to-akka-typed-using-scala/index.md
@@ -1,21 +1,20 @@
+++
title = "Introduction to Akka Typed Using Scala"
-date = 2020-10-24T20:32:41-07:00
description = "An Introduction to AKKA Typed using Scala with an example"
-featured = false
-draft = false
-toc = true
-featureImage = "/img/akka_logo.svg"
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 30
-codeLineNumbers = false
-figurePositionShow = false
-keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "ZIO Actors","swift language actors"]
+date = 2020-10-24T20:32:41-07:00
+
+[taxonomies]
tags = ["actor model", "concurrency", "distributed systems", "scala", "akka"]
-categories = ["concurrency", "distributed systems", "scala"]
+categories = ["Software Engineering"]
+
+[extra]
+social_media_card = "akka_logo.svg"
+toc = true
+keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "ZIO Actors","swift language actors"]
+++
+![akka](akka_logo.svg)
+
In this post I am going to do a quick introduction to using the Akka Typed toolkit that implements the Actor model using Scala. As part of this post I will be developing a simple application using Akka. My goal is to highlight what its like to develop applications using Akka and how to get started with it. I will be following up this post with more posts diving into Akka in more details and exploring more of its features and patterns you can use to solve concurrent and distributed applications.
Before reading this post it is recommended that you read my earlier post [Introduction to the Actor Model](/post/introduction-to-the-actor-model/) as I have assumed the reader will be familiar with the concepts discussed in that post.
@@ -26,7 +25,7 @@ To get start we are going to build a simple mailing list application where a per
The diagram below illustrates the actors that we will need and the message flow between each actor.
-![Akka Actor System Design Example](/img/akka_actor_system_design.png)
+![Akka Actor System Design Example](akka_actor_system_design.png)
- `Root Actor`: Creates the actor system and spawns all the actors.
- `Validate Email Address Actor`: Validates if the new message received has a valid email address
diff --git a/static/img/actor.png b/content/post/introduction-to-the-actor-model/actor.png
similarity index 100%
rename from static/img/actor.png
rename to content/post/introduction-to-the-actor-model/actor.png
diff --git a/static/img/actor_oranges_example.png b/content/post/introduction-to-the-actor-model/actor_oranges_example.png
similarity index 100%
rename from static/img/actor_oranges_example.png
rename to content/post/introduction-to-the-actor-model/actor_oranges_example.png
diff --git a/content/post/introduction-to-the-actor-model.md b/content/post/introduction-to-the-actor-model/index.md
similarity index 95%
rename from content/post/introduction-to-the-actor-model.md
rename to content/post/introduction-to-the-actor-model/index.md
index 8f2b538..1def843 100644
--- a/content/post/introduction-to-the-actor-model.md
+++ b/content/post/introduction-to-the-actor-model/index.md
@@ -1,21 +1,20 @@
+++
title = "Introduction to the Actor Model"
-date = 2020-10-04T11:23:12-07:00
description = "In this post I am going do a quick introduction to the actor model and the problems it is trying to solve."
-toc = true
-featured = false
-draft = false
-featureImage = "/img/via/Screen-Shot-2020-10-17-15-56-15.66.png"
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 10
-codeLineNumbers = false
-figurePositionShow = false
-keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "swift language actors"]
+date = 2020-10-04T11:23:12-07:00
+
+[taxonomies]
tags = ["actor model", "concurrency", "distributed systems"]
-categories = ["concurrency", "distributed systems"]
+categories = ["Software Engineering"]
+
+[extra]
+social_media_card = "introduction_to_the_actor_model.png"
+toc = true
+keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "swift language actors"]
+++
+![Actors](introduction_to_the_actor_model.png)
+
My first proper computer was an IBM PC clone with an Intel 486 processor. It had a button on it called `turbo` that when you pushed it would run the processor at double the speed. I say proper as before that I had started my computer journey with a Sinclair ZX Spectrum (48k Ram) and a Commodore 64 (64k Ram) hence didn't consider them as serious contenders for this post. It has been a really exciting ride watching hardware and software evolve together. The interesting observation has been that as faster more powerful hardware has come out, software has been quick to grab all the extra speed and resources the new hardware provides.
Watching how CPU's have evolved, in the early days it was all about clock speed and cache as the main optimizations to improve performance. However in the later years multicore and hyperthreading has been the driving factor to improve performance. This means that in current times to reap the maximum performance benefits that are offered by todays processors we need to write our software leveraging concurrency.
@@ -26,7 +25,7 @@ There are many methods and patterns of concurrency. In this post I am going to f
An actor is an entity that receives a message and does some processing on the received message as a self contained concurrent operation.
-![Actor](/img/actor.png)
+![Actor](actor.png)
An Actor consists of an isolated internal state, an address, a mailbox and a behavior.
@@ -59,7 +58,7 @@ In an actor system every actor has a supervisor who is responsible for handling
Lets go through a contrived simple example, lets say you are a store that sells oranges. You have 10 oranges in stock. You have two customers who try to buy 7 oranges each. As you don't have enough oranges you cannot serve both customers requests for oranges.
-![Object Oriented Programming Flow Example](/img/oop_oranges_example.png)
+![Object Oriented Programming Flow Example](oop_oranges_example.png)
In a normal object oriented (multi-threadeed) program a customer would send a request to a service requesting the oranges they want. They expect a reply right away and wait for the response. When the request is received a check is made against the database to make sure there are enough oranges to fulfill the request (i.e. number of oranges >= 7) and if so, a success will be returned to the customer and 7 oranges will be deducted from the total orange count, python like pseudo code:
@@ -77,7 +76,7 @@ If the second customer places their order at the same time, as our application i
Using the Actor model this kind of race condition is avoided.
-![Actor Programming Flow Example](/img/actor_oranges_example.png)
+![Actor Programming Flow Example](actor_oranges_example.png)
When each of the two requests are received, they will placed in the actor's inbox. The actor processes one request at a time from the inbox. The actors state are the oranges and updates to it are done whilst processing a single request which completes before the next request is fetched and processed from the inbox, thereby avoiding any potention race condition.
diff --git a/static/img/via/Screen-Shot-2020-10-17-15-56-15.66.png b/content/post/introduction-to-the-actor-model/introduction_to_the_actor_model.png
similarity index 100%
rename from static/img/via/Screen-Shot-2020-10-17-15-56-15.66.png
rename to content/post/introduction-to-the-actor-model/introduction_to_the_actor_model.png
diff --git a/static/img/oop_oranges_example.png b/content/post/introduction-to-the-actor-model/oop_oranges_example.png
similarity index 100%
rename from static/img/oop_oranges_example.png
rename to content/post/introduction-to-the-actor-model/oop_oranges_example.png
diff --git a/static/img/ZIO.png b/content/post/introduction-to-zio-actors/ZIO.png
similarity index 100%
rename from static/img/ZIO.png
rename to content/post/introduction-to-zio-actors/ZIO.png
diff --git a/content/post/introduction-to-zio-actors.md b/content/post/introduction-to-zio-actors/index.md
similarity index 96%
rename from content/post/introduction-to-zio-actors.md
rename to content/post/introduction-to-zio-actors/index.md
index e24c93a..c36d913 100644
--- a/content/post/introduction-to-zio-actors.md
+++ b/content/post/introduction-to-zio-actors/index.md
@@ -1,21 +1,20 @@
+++
title = "Introduction to Zio Actors"
-date = 2020-11-01T14:14:21-08:00
description = "Introduction to ZIO Actors"
-featured = false
-draft = false
+date = 2020-11-01T14:14:21-08:00
+
+[taxonomies]
+tags = ["actor model", "concurrency", "distributed systems", "scala", "functional programming", "zio"]
+categories = ["Software Engineering"]
+
+[extra]
toc = true
-featureImage = "/img/ZIO.png"
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 30
-codeLineNumbers = false
-figurePositionShow = false
+social_media_card = "ZIO.png"
keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "zio actors","swift language actors", "functional programming", "fp"]
-tags = ["actor model", "concurrency", "distributed systems", "scala", "zio", "zio-actors", "functional programming"]
-categories = ["concurrency", "distributed systems", "scala", "functional programming"]
+++
+![ZIO](ZIO.png)
+
In this post I am going to do a quick introduction to using the [ZIO Actors](https://zio.github.io/zio-actors/), a library that implements the Actor model using Scala and ZIO a library for asynchroneous and concurrent programming.
Before reading this post it is recommended that you read my two earlier posts [Introduction to the Actor Model](/post/introduction-to-the-actor-model/) and [Introduction to Akka Typed Using Scala](/post/introduction-to-akka-typed-using-scala/) as I have assumed the reader will be familiar with the concepts discussed in those posts. Some basic knowledge of [ZIO](https://zio.dev) is assumed.
@@ -28,7 +27,7 @@ To get start we are going to build a simple mailing list application where a per
The diagram below illustrates the actors that we will need and the message flow between each actor.
-![ZIO Actor System Design Example](/img/zio_actor_system_design.png)
+![ZIO Actor System Design Example](zio_actor_system_design.png)
- `ZIO Actor System`: Creates the actor system and spawns all the actors.
- `Validate Email Address Actor`: Validates if the new message received has a valid email address
diff --git a/static/img/zio_actor_system_design.png b/content/post/introduction-to-zio-actors/zio_actor_system_design.png
similarity index 100%
rename from static/img/zio_actor_system_design.png
rename to content/post/introduction-to-zio-actors/zio_actor_system_design.png
diff --git a/content/post/lessons-learned-from-being-a-zio-contributor.md b/content/post/lessons-learned-from-being-a-zio-contributor.md
deleted file mode 100644
index 8d712e1..0000000
--- a/content/post/lessons-learned-from-being-a-zio-contributor.md
+++ /dev/null
@@ -1,167 +0,0 @@
-+++
-title = "Lessons Learned From Being a ZIO Contributor"
-date = 2020-09-15T12:43:34-07:00
-description = "Contributing to your first open source project can be daunting but is a rewarding experience. In this post I will discuss what it is like to contribute to the ZIO Scala library, what lessons were learned from this experience, and discuss how you can get started contributing to your first open source project."
-draft = false
-toc = true
-featured = false
-featuredImage = "https://github.com/zio/zio/blob/master/ZIO.png?raw=true"
-keywords = ["functional programming", "scala", "zio", "open source", "lambdaconf", "contributor"]
-tags = ["functional programming", "scala", "zio", "open source"]
-categories = ["functional programming", "scala", "zio", "open source", "conference", "talks"]
-+++
-
-# Talk at LambdaConf 2020 #
-
-This blog post is a companion to the [Lambdaconf 2020 Talk](https://lambdaconf.zohobackstage.com/LambdaConf2020#/tickets) I did on this topic. Video of my talk will be added to this post once it is available.
-
-[Slides of my talk at LambdaConf 2020](https://github.com/softinio/talks/blob/master/lambdaconf2020/lessons_learnt_from_being_a_zio_contributor.pdf)
-
-## My Journey to being an Open source contributor ##
-
-I started my programming life at the age of eleven which lead to me learning Pascal, Fortran and C Programming by the time I graduated from University.
-
-First half of my career was spend writing software for enterprise level companies using C, Java, Oracle DB on Unix whilst watching open source software being talked about and used. At that point in my career I had zero contact with open source with the exception of being an early Linux enthusist and desktop user. As open source grew it did start trickling into my work with time, so the next phase of my career as a software engineer was filled with using open source projects on my stack on all the projects I was working on multiple levels.
-
-Open source was a culture shock to me, the whole concept of the someone giving up their personal time to write software that they share with the rest of the world without any direct renumeration was something I spent time trying to understand. I felt guilty that at work we use so many but don't seem to be thanking the authors in any way for using what they created.
-
-Wanting to understand open source more, and wanting to give back I started looking for an open source project to contribute to. I started by choosing projects I had an interest in or had used before and tried to interact with the current contributors and maintainers. As new comer to the projects I found this process difficult through no fault of each projects maintainers. As everyone are in effect volunteers, they only have a certain amount of bandwidth to contribute to their project so did not have any time or process to help new contributors on board. I then saw on reddit a project maintainer wanting a new maintainer for their open source project so I expressed an interest. To my surprise others who had nothing to do with the project started reacting in a negative way to my interest which included an arrogant rude interaction with a well known figure of that community. This friction to contribute lead me to take a step back and reconsider how I want to contribute to an open source project planning to revisit it later on.
-
-I was learning and using [Scala](https://www.scala-lang.org/) at work for the first time and as it was a technology I had introduced I had no mentors at work to work with and hence started following key people in the Scala community and try to learn from them. One of the people I was following (whom at this point I had never met) was [John A De Goes](https://degoes.net/). Following John on twitter one day he mentioned on twitter that he is looking to start a new open source project and he is looking for contributors and he will be providing mentorship to get the project off the ground. If I remember right around 300 people replied expressing an interest when he was hoping to find 5 people 😀. This is where my journey into being a ZIO contributor began.
-
-# Contributing to ZIO #
-
-[ZIO](https://zio.dev) is a library for asynchronous and concurrent programming that is based on pure functional programming for the Scala programming language.
-
-ZIO comprises of the core library itself and multipe smaller projects which either use ZIO or complement ZIO to solve different technical problems. Goal being that no matter what problems you are trying to solve, you can build a complete solution using ZIO.
-
-The core library itself is by far the area that attracts most contributors. The velocity of new changes being merged is very high. There was a time where I was to review every single PR that would come in, not anymore.
-
-## Decide on a project to contribute to ##
-
-First thing to do is to decide on a project you want to contribute too.
-
-To get started visit [ZIO list of repositories on GitHub](https://github.com/zio) anhave a browse of the different projects.
-
-![ZIO Projects](/img/via/Screen-Recording-2020-09-05-20-02-47.gif)
-
-Every project will have something different to offer you that will help you decide on what project is a good fit for you. Some projects have only recently started so if you are looking for something with less code to get familiar at the expense of fast changing. There are also projects that are short of contributors to consider.
-
-A good practice is to look at the issue tracker of the projects on GitHub and start contributing with some low hanging fruit. We do try to label `good first issues`. There are also some issues labeled `documention` which are good to start with.
-
-Each project has an associated channel on the [ZIO Discord](https://sca.la/ziodiscord) feel free to stop by, chat with the existing contributors who will be delighted to help you get started. Open invitation get in touch with me and I will help also.
-
-## Starting a new ZIO Project ##
-
-The other option is to contribute a new project to the ZIO eco-system. Think of new library that can use ZIO to solve a problem that doesn't exist or a library that extends ZIO capability.
-
-The best way to get started with this is to use our [ZIO giter8 seed project](https://github.com/zio/zio-project-seed.g8). To get started with your project simpy run:
-
-```shell-script
-sbt new zio/zio-project-seed.g8
-```
-We have tried to standardize across all projects as much as possible on project structure, how we build our projects, what plugins and dependencies we use as base and how CI is run. By using this seed to create your project your project is conforming to this standard.
-
-The project generated by the seed even includes a sample project website all ready with the appropriate CI configuration to deploy to GitHub pages with minimal change.
-
-There are two options available to you when starting a new ZIO based project:
-
-1. `ZIO Project`: Your project is added to the offical ZIO organization on GitHub and Maven. Your project will also have its own channel on the [ZIO Discord](http://sca.la/ziodiscord) as a ZIO Project.
-
-2. `Community Project`: Your project is part of your own GitHub account/organization and maven account. You can still use [ZIO Discord](https://sca.la/ziodiscord) `#zio-users` channel for any kind of conversation you need help with your project. We want your project to succeed and make a point of being approachable. Once your project is mature we would consider creating a channel for you on our discord under the community projects section. We evaluate this on a case by case basis.
-
-We have had multiple cases of projects starting as a community project and then being moved to the ZIO organization. There are a lot of advantages for doing this such as increased publicity leading increased adoption of your library as well as attracting more contributors to help with your project. This is one of the reasons its best to start your project with the ZIO seed as if you decide you want to do this later it will be a lot easier to move.
-
-## Devops, infrastructure & Builds Lair ##
-
-All our projects support both JDK Versions `8` and `11`. All projects support Scala versions `2.12.*`, `2.13.*` & `Dotty`.
-
-Scala `2.11.*` as needed so you will see some projects have it added some don't. If your project is new and need it added take a look at [ZIO Actors](https://github.com/zio/zio-actors) and add it to the CircleCI and SBT settings.
-
-If you need help with anything devops, build, infrastructure like CI related issues ask in the `#devops-lair` channel on [ZIO Discord](http://sca.la/ziodiscord) for help. If necessary create an issue on the relevant repositories issue tracker on GitHub and share link in this channel on discord for feedback and help.
-
-We use CircleCI for all our builds but we are looking at moving to GitHub Actions which is an exciting effort coming up as it will help improve our build and release process better.
-
-All our active projects on merge to the `master` branch do an automated `snapshot` release to maven so you don't have to wait for an official release to try the latest changes. We do periodic when necessary do official releases of the projects. Releases are done by doing a GitHub release and using [semantic versioning](https://semver.org/). For details of each release see the releases tab on GitHub for the project (example: [ZIO Releases](https://github.com/zio/zio/releases)). They do include some release notes that are helpful.
-
-## Projects Documentation sites ##
-
-We use [mdoc](https://scalameta.org/mdoc/) to generate our documentation inconjunction with [Docusaurus](https://docusaurus.io/) (version 1.x at the time of writing though we plan to upgrade to version 2.x) for every projects documentation microsite.
-
-All projects have this already setup as part of the CI build. New Microsite is published when we do an official release of a project.
-
-We do plan on making improvements in the future where in addition to documentation being updated at the point of release for us to be able to do adhoc releases of the documentation on its own.
-
-The core ZIO project's documentation is the only one with its own domain and is what you see when visiting . This is hosted by a combination of using GitHub pages and [Netlify](https://www.netlify.com/).
-
-All other projects use GitHub pages and have a GitHub pages project URL as opposed to a custom domain.
-
-## Contribution Etiquette and Collaboration ##
-
-The environment to contribute to an open source project is very different than how you collaborate with colleagues at work. The biggest points to realize is everyone is in effect a volunteer giving up their time to help. They maybe in a different timezone and only have certain pockets of time around their busy lives to take part.
-
-As such working in harmony, being patient and greatful for all the help is very important. What I would like to summaries a few do's and don't that we should follow as an etiquette in order to maintain a happy and welcoming environment for all.
-
-### Working on an issue ###
-
-If you are interested in working on an issue, check the issue comments to make sure no one else is working on it already. If no one else is make a comment on the issue that you are working on it.
-
-If someone has already commented on it that they are working on it and a considerable time has passed (about a month I would say is reasonable) with no visible work on the issue being done and no PR then add a comment asking if that contributor is still working on it and wait a few days for response and if they no longer are you are welcome to comment on the issue that you will be working on it. If in doubt as in the projects discord channel.
-
-Unfortunately, due to the general nature of open source, you may see situations that multiple contributors work on the same issue and multiple PRs get submitted. This is why it is important to try your best to communicate your intentions as well as possible to minimize this happening.
-
-### Pull request reviewers ###
-
-Maintainers do regularly review new Pull Request to review but if you want to bring it their attention or tag someone for review you can either look at the pull request history to see who to tag for review or discuss PR in the projects discord channel.
-
-Each project does have a group of maintainers who care about its progress who are the ones review your work.
-
-In a work environment you would refer to them as project leads but its not really the same in open source. Its more the case that the maintainer has devoted a lot of their time to the project already that differentiates them from a new or an occasional contributor.
-
-## Learning and Getting Help ##
-
-Being a ZIO contributor is an opportunity to learn and practice. When trying to contribute don't hesitate to ask for help. All of us who have been contributing to ZIO for a while strive because we are happy to help each other and learn from each other.
-
-When picking up an issue to work on and have any questions, ask by commenting on it or go to the projects discord channel and have a discussion about any topic that you need help with.
-
-We try to be a very welcoming and helpful community so we look forward to helping you succeed at contributing.
-
-Don't forget about the tools you have available to help you succeed:
-
-- GitHub issues
-- [ZIO Discord](https://sca.la/ziodiscord)
-
-### Additional Resources for Contributing ###
-
-- [ZIO Contributor Guidelines](https://zio.dev/docs/about/about_contributing)
-- [ZIO Coding Guidelines](https://zio.dev/docs/about/about_coding_guidelines)
-- [ZIO Code of Conduct](https://zio.dev/docs/about/about_coc)
-
-ZIO Code of conduct linked above does include details of the current steering committee that you can contact in case of any issues especially conduct related.
-
-## Lessons Learnt Contributing to ZIO ##
-
-- Anyone can be a contributor. I used to think open source was done by a small group of elite people and not for *regular* developers. Contributing to ZIO showed me I was wrong and really anyone can and should participate.
-
-- Focus your library on satisfying user experience and their needs and the rest will take care of itself
-
-{{< youtube NZN0A0U6ysg >}}
-
-- The power of the group. Do your best to figure out the answer yourself but be open when you haven't figured something out. It is amazing what we can figure out together.
-
-- ZIO community is very welcoming to everyone especially if you are junior in Scala. A lot of passionnate people who have a common goal to push Scala to the top.
-
-- Everyone in the ZIO community makes you feel supported
-- You will learn a lot by just trying to answer other peoples question on discord
-- Contributing to open source is the best way to learn and gain experience. Better than any course.
-- Quality of feedback and help is very high enabling you to learn a lot
-- Improved my collaboration skills by a large margin
-- Learn a ton about concurrency, performance tuning and functional design
-- Make a lot of new friends from all around the world that you would never have otherwise met
-- Microsite CI build will always randomly fail when you haven't changed anything, just to make you laugh 🤣
-
-
-
-
-
-
diff --git a/content/post/migrating-from-pelican-to-hugo.md b/content/post/migrating-from-pelican-to-hugo.md
index a9d57f5..622d317 100644
--- a/content/post/migrating-from-pelican-to-hugo.md
+++ b/content/post/migrating-from-pelican-to-hugo.md
@@ -1,11 +1,15 @@
+++
title = "Migrating from Pelican to Hugo"
-date = "2015-11-29T07:16:53-05:00"
description = "In this post I will discuss the steps I took to migrate my blog from Pelican to Hugo."
+date = "2015-11-29T07:16:53-05:00"
+
+[taxonomies]
+tags = ["blog"]
+categories = ["Blogging"]
+
+[extra]
toc = true
keywords = ["pelican", "hugo", "golang", "go", "python", "blog"]
-tags = ["hugo", "golang", "blog"]
-categories = ["development"]
+++
In this post I will discuss the steps I took to migrate my blog from [Pelican](http://blog.getpelican.com/) to [Hugo](http://gohugo.io/).
diff --git a/content/post/moving-from-homebrew-to-nix-package-manager.md b/content/post/moving-from-homebrew-to-nix-package-manager.md
index 1a3d302..2b8feda 100644
--- a/content/post/moving-from-homebrew-to-nix-package-manager.md
+++ b/content/post/moving-from-homebrew-to-nix-package-manager.md
@@ -1,14 +1,15 @@
+++
title = "Moving from Homebrew to Nix Package Manager"
-date = 2019-02-16T18:30:40-07:00
description = "Moving from Homebrew to Nix Package manager on my macbook pro"
-featured = true
-draft = false
-toc = true
-featureImage = "/img/via/Screen-Shot-2019-02-17-13-04-16.png"
-keywords = ["nix", "nixos", "macos", "macbook", "package manager", "functional programming"]
+date = 2019-02-16T18:30:40-07:00
+
+[taxonomies]
tags = ["nix", "nixos", "macos", "functional programming"]
-categories = ["nix", "nixos", "macos"]
+categories = ["Developer Tools"]
+
+[extra]
+toc = true
+keywords = ["nix", "nixos", "macos", "macbook", "package manager", "functional programming"]
+++
As all my friends, colleagues and followers know I am very big on functional programming, so when I heard about nixOS and the nix package manager (A Purely Functional package manager) I really wanted to find out more about it.
diff --git a/static/img/via/Mya_team_PyBay_2018.jpg b/content/post/pybay-2018-san-francisco/Mya_team_PyBay_2018.jpg
similarity index 100%
rename from static/img/via/Mya_team_PyBay_2018.jpg
rename to content/post/pybay-2018-san-francisco/Mya_team_PyBay_2018.jpg
diff --git a/static/img/via/PyBay2018Crew.jpeg b/content/post/pybay-2018-san-francisco/PyBay2018Crew.jpeg
similarity index 100%
rename from static/img/via/PyBay2018Crew.jpeg
rename to content/post/pybay-2018-san-francisco/PyBay2018Crew.jpeg
diff --git a/static/img/via/PyBay_2018_Start.png b/content/post/pybay-2018-san-francisco/PyBay_2018_Start.png
similarity index 100%
rename from static/img/via/PyBay_2018_Start.png
rename to content/post/pybay-2018-san-francisco/PyBay_2018_Start.png
diff --git a/static/img/via/Rachel_Thomas_PyBay_2018.png b/content/post/pybay-2018-san-francisco/Rachel_Thomas_PyBay_2018.png
similarity index 100%
rename from static/img/via/Rachel_Thomas_PyBay_2018.png
rename to content/post/pybay-2018-san-francisco/Rachel_Thomas_PyBay_2018.png
diff --git a/static/img/via/Raymond_Hettinger_PyBay_2018.jpg b/content/post/pybay-2018-san-francisco/Raymond_Hettinger_PyBay_2018.jpg
similarity index 100%
rename from static/img/via/Raymond_Hettinger_PyBay_2018.jpg
rename to content/post/pybay-2018-san-francisco/Raymond_Hettinger_PyBay_2018.jpg
diff --git a/static/img/via/Travis_Olaphant_Keynote_PyBay2018.JPG b/content/post/pybay-2018-san-francisco/Travis_Olaphant_Keynote_PyBay2018.JPG
similarity index 100%
rename from static/img/via/Travis_Olaphant_Keynote_PyBay2018.JPG
rename to content/post/pybay-2018-san-francisco/Travis_Olaphant_Keynote_PyBay2018.JPG
diff --git a/static/img/via/Travis_Olaphant_PyBay_2018.jpg b/content/post/pybay-2018-san-francisco/Travis_Olaphant_PyBay_2018.jpg
similarity index 100%
rename from static/img/via/Travis_Olaphant_PyBay_2018.jpg
rename to content/post/pybay-2018-san-francisco/Travis_Olaphant_PyBay_2018.jpg
diff --git a/static/img/via/Yuri_Selivanov_PyBay_2018.jpg b/content/post/pybay-2018-san-francisco/Yuri_Selivanov_PyBay_2018.jpg
similarity index 100%
rename from static/img/via/Yuri_Selivanov_PyBay_2018.jpg
rename to content/post/pybay-2018-san-francisco/Yuri_Selivanov_PyBay_2018.jpg
diff --git a/content/post/pybay-2018-san-francisco.md b/content/post/pybay-2018-san-francisco/index.md
similarity index 90%
rename from content/post/pybay-2018-san-francisco.md
rename to content/post/pybay-2018-san-francisco/index.md
index 7d2c7e8..e79af9b 100644
--- a/content/post/pybay-2018-san-francisco.md
+++ b/content/post/pybay-2018-san-francisco/index.md
@@ -1,13 +1,19 @@
+++
title = "PyBay 2018 San Francisco"
-date = 2018-10-25T18:30:40-07:00
description = "Highlights of PyBay 2018 conference a Python event based in the San Francisco Bay Area California"
-draft = false
-featureImage = "/img/via/PyBay_2018_Start.png"
-keywords = ["python", "pybay", "sfpython", "pycon", "san francisco", "bay area", "california", "conference"]
+date = 2018-10-25T18:30:40-07:00
+
+[taxonomies]
tags = ["python", "conference"]
-categories = ["python", "conference"]
+
+[extra]
+social_media_card = "PyBay_2018_Start.png"
+toc = true
+keywords = ["python", "pybay", "sfpython", "pycon", "san francisco", "bay area", "california", "conference"]
+++
+
+![PyBay 2018](PyBay_2018_Start.png)
+
As you read in my [last blog](https://www.softinio.com/post/life-changes-and-announcing-sfbayareatech/)
I was lucky enough to finally move to the bay area. If you know me you will
know that I am passionate about Scala and Python. To me being a master of these
@@ -38,8 +44,6 @@ build. My biggest take aways from her talk were:
matter so designing algorithms powering your AI you need to always remember
that and take into account.
- {{< youtube D4A18tUUb2Y >}}
-
- Machines can be used to predict the future and can be biased
- Software is used to make *Life changing* decisions
- We have a responsability to think about our whole system and how it impacts peoples lives
@@ -62,7 +66,7 @@ build. My biggest take aways from her talk were:
- [Weapons of Math Destruction](https://www.amazon.com/Weapons-Math-Destruction-Increases-Inequality/dp/0553418831)
- [Datasheets for datasets](https://arxiv.org/abs/1803.09010)
-![Salar Rahmanian meets Rachel Thomas after keynote at PyBay 2018](/img/via/Rachel_Thomas_PyBay_2018.png)
+![Salar Rahmanian meets Rachel Thomas after keynote at PyBay 2018](Rachel_Thomas_PyBay_2018.png)
# Day two of PyBay 2018
Day got on the way with a keynote by [Raymond Hettinger](https://twitter.com/raymondh) a Python Core developer based here in the bay area.
@@ -71,13 +75,13 @@ Day got on the way with a keynote by [Raymond Hettinger](https://twitter.com/ray
In his keynote we were given an overview of all the different testing tools available to us as Python developers that we can use to produce quality code and debug our work. He talked positively about my two favorite testing tools in the Python world which are [Pytest](https://docs.pytest.org/en/latest/) and [Hypothesis](https://hypothesis.readthedocs.io/en/latest/)
-![Raymond Hettinger at PyBay 2018](/img/via/Raymond_Hettinger_PyBay_2018.jpg)
+![Raymond Hettinger at PyBay 2018](Raymond_Hettinger_PyBay_2018.jpg)
## Asyncio: What's next (Yuri Selivanov)
The next talk on day 2 that stood out for me was [Yuri Selivanov](https://www.linkedin.com/in/yselivanov/) the Python core developer behind asyncio and the uvloop library which enables us to develop high performance Python applications. I enjoyed listening to his update on where we are with asyncio and whats coming next. Yuri also drew comparisons to the new [Trio Async Libray](https://github.com/python-trio/trio) by our very own [Nathaniel J Smith](https://vorpus.org/). I am super excited about the direction and options we have here and look forward to using them in my projects.
-![Yuri Selivanov at PyBay 2018](/img/via/Yuri_Selivanov_PyBay_2018.jpg)
+![Yuri Selivanov at PyBay 2018](Yuri_Selivanov_PyBay_2018.jpg)
# Day three of PyBay 2018
The final day of PyBay 2018 kicked off with a Keynote by the one and only [Travis Olaphant](https://www.linkedin.com/in/teoliphant/) the founder/creator of [Anaconda](https://www.anaconda.com/)
@@ -86,19 +90,19 @@ The final day of PyBay 2018 kicked off with a Keynote by the one and only [Travi
In this keynote we were taken through the journey of what has made Python such a great eco system for Data Science. Funny enough most of the tools that we use Travis Oliphant has had a hand in making it available to us all such as NumPy and SciPy. It was a real pleasure meeting him in person.
-![Salar Rahmanian meeting Travis Olaphant at PyBay 2018](/img/via/Travis_Olaphant_PyBay_2018.jpg)
-![Final Day Keynote by Travis Olaphant at PyBay 2018](/img/via/Travis_Olaphant_Keynote_PyBay2018.JPG)
+![Salar Rahmanian meeting Travis Olaphant at PyBay 2018](Travis_Olaphant_PyBay_2018.jpg)
+![Final Day Keynote by Travis Olaphant at PyBay 2018](Travis_Olaphant_Keynote_PyBay2018.JPG)
# Lightening talks at PyBay 2018
One of the more fun aspects of PyBay was the lightening talks. Everyday of the conference there was a slot for doing a 5 minute lightening talk. One of the speakers that was planned for the third day of the conference dropped out so the organizers turned that hour into an extra lightening talk hour. They were looking for volunteers to do a lightening talk unplanned on short notice and for better or worse I volunteered and did a super fast lightening talk on using [pyenv](https://www.softinio.com/post/using-pyenv-for-python-projects/) fast forward to 5:22 to see my lightening talk:
-{{< youtube KqqMSB0eyhk >}}
+{{ youtube(id="KqqMSB0eyhk") }}
# Thank you PyBay 2018
What made the event even more fun for me was that [Mya](https://hiremya.com/) was one of the sponsors so got the chance to enjoy the conference with my esteemed colleagues and found it incredibly fun to talk to everyone at the conference on the problems we are solving at Mya using Python.
-![Mya team at PyBay 2018](/img/via/Mya_team_PyBay_2018.jpg)
+![Mya team at PyBay 2018](Mya_team_PyBay_2018.jpg)
A Huge thank you to the organizers of PyBay 2018 for putting such a great event together. Lets not forget that PyBay is organized by a group of volunteers so their effort to put such a great event together was outstanding. Especially I would like to thank [Grace Law](https://www.linkedin.com/in/gracelaw1972/), [Simeon Franklin](https://www.linkedin.com/in/simeonfranklin/), [Daniel Pyrathon](https://www.linkedin.com/in/danielpyrathon/), [Paul Starrett](https://www.linkedin.com/in/paul-starrett-esq-ll-m-cfe-ence-251325/), and [Nick DiRienzo](https://www.linkedin.com/in/nickdirienzo/)
-![PyBay 2018 Crew](/img/via/PyBay2018Crew.jpeg)
+![PyBay 2018 Crew](PyBay2018Crew.jpeg)
diff --git a/content/post/scale-by-the-bay-2018-san-francisco.md b/content/post/scale-by-the-bay-2018-san-francisco/index.md
similarity index 91%
rename from content/post/scale-by-the-bay-2018-san-francisco.md
rename to content/post/scale-by-the-bay-2018-san-francisco/index.md
index 8ca44da..a3c80e7 100644
--- a/content/post/scale-by-the-bay-2018-san-francisco.md
+++ b/content/post/scale-by-the-bay-2018-san-francisco/index.md
@@ -1,23 +1,26 @@
+++
title = "Scale By The Bay 2018 San Francisco"
-date = 2019-05-02T18:30:40-07:00
description = "Highlights of Scale By The Bay 2018 San Francisco conference an event based in the San Francisco Bay Area California with major focus on Functional Programming, Reactive programming and Data Science"
-draft = false
-keywords = ["scala", "bythebay", "sfscala", "functional programming", "san francisco", "bay area", "california", "conference"]
+date = 2019-05-02T18:30:40-07:00
+
+[taxonomies]
tags = ["scala", "conference", "functional programming"]
-categories = ["scala", "conference", "functional programming"]
+
+[extra]
+toc = true
+keywords = ["scala", "bythebay", "sfscala", "functional programming", "san francisco", "bay area", "california", "conference"]
+++
One of the highlights of 2018 was attending and being part of the Scale By the bay 2018 conference in San Francisco. This by far was the best conference I have ever attended.
-![Scale By the Bay 2018](/img/via/scalebythebay_2018_header.jpg)
+![Scale By the Bay 2018](scalebythebay_2018_header.jpg)
from left: [Dick Wall](https://twitter.com/dickwall), [Salar Rahmanian](https://twitter.com/SalarRahmanian), [Martin Odersky (Creator of Scala)](https://twitter.com/odersky), [Alexy Khrabrov](https://twitter.com/ChiefScientist), [Jakob Odersky ](https://twitter.com/jodersky)
The conference had 3 tracks covering the functional programming, reactive programming and data science topics. All the talks were of high quality made even better by highly intelligent audience made up of the most talented stars of our industry.
## Keynotes
-![Scale By the Bay 2018 Keynotes](/img/via/scalebythebay_2018_keynotes.jpg)
+![Scale By the Bay 2018 Keynotes](scalebythebay_2018_keynotes.jpg)
### New Functional Constructs in Scala 3 by Martin Odersky (Creator of Scala)
@@ -25,7 +28,7 @@ The first keynote was by the creator of Scala Programming language. He took us t
I personally am excited about the new features coming out and am optimistic about the success of the new version. In addition there will be new tooling the scala center is working on that will help with migrating to the new version. Let's not forget Scala is strongly typed which will help a lot with the migration unlike languages like Python.
-{{< youtube 6P06YHc8faw >}}
+{{ youtube(id="6P06YHc8faw") }}
### Kafka and the Rise of the event driven Microservices by Neha Narkhede (Co-creator of Apache Kafka)
This keynote started off by asking the audience who uses Kafka in Production today. It was fascinating to see that 95% of the audience were which is a huge endorsement of Kafka.
@@ -34,40 +37,40 @@ One of the initial and primary use cases for using Kafka has been to build data
This new paradigm will allow us to take data from your applications and data from your data systems like databases and do stream processing on them to produce.
-{{< youtube DOoJzaXOGxs >}}
+{{ youtube(id="DOoJzaXOGxs") }}
## Concurrency and more concurrency
There was a common theme at this years conference, multiple talks about libraries and patterns to make concurrency and parallel processing easier and over coming the pain points associated with it.
Jakob Odesky talk summarized the concurrency options available to you within Scala Language and the JVM such as threads, Futures and Promises. He then went on to talk about Scala Center 's [scala-async](https://github.com/scala/scala-async) library which has lead him to his new open source project [escale](https://github.com/jodersky/escale) which is built on top of scala-async. This new library, escale, introduces the same concept as channels and green threads that was introduced by the go programming language for scala. I look forward to seeing how this evolves.
-{{< youtube EuNEZW8ljeY >}}
+{{ youtube(id="EuNEZW8ljeY") }}
Michael Pilquist gave us a nice update on `cats-effect` took us through an overview of some of the features it has to solve concurrency problems. There was lot of content in his talk for me to summarize in this post so I urge you to watch the video of his talk.
-{{< youtube Gig-f_HXvLI >}}
+{{ youtube(id="Gig-f_HXvLI") }}
My favorite talk of the conference was a talk by Sergei Winitzki on Declarative distributed concurrency in Scala where he talk about his open source project [Chymyst](https://github.com/Chymyst/chymyst-core) which implements the chemical machine (based on joint calculus). The philosophy and end goal of the chemical machine is to be able to process what ever problem you are trying to solve in 15 lines or less of code. Containers holding values are known as `molecules`. Molecules float around the site until they combine to form a chemical reaction the output of which can be used again. In his implementation partial functions where used to implement the reactions. I loved the analogy to chemistry and Sergei's presentation really explained the concept well to spark my interest in this. Since his talk I have researched the topic of chemical machines and I could only find research papers on the topic and none of them do as good a job in explaining what it is as the talk did so I urge you to watch the video.
-{{< youtube 23O32DMm69E >}}
+{{ youtube(id="23O32DMm69E") }}
## Hero’s welcome
Over the years in my career I have followed many of the people I met at this years conference. Their work and teachings have helped me progress my knowledge and ability and have motivated me and others to be part of a great community.
Here are some pictures of the tech heroes I got to meet at this conference:
-![Scale By the Bay 2018 ](/img/via/scale_by_the_bay_2018_1.JPG)
+![Scale By the Bay 2018 ](scale_by_the_bay_2018_1.JPG)
Top left: [Rob Norris (creator of Doobie)](https://twitter.com/tpolecat), Top right: [Ross Baker (creator of http4s)](https://twitter.com/rossabaker),
Bottom left: [Michael Pilquist (Creator of FS2)](https://twitter.com/mpilquist), Bottom right: [Jon Pretty (Scala Center Advisory board chair)](https://twitter.com/propensive/)
-![Scale By the Bay 2018](/img/via/scale_by_the_bay_2018_2.JPG)
+![Scale By the Bay 2018](scale_by_the_bay_2018_2.JPG)
[Runar Bjarnason ](https://twitter.com/runarorama) & [Paul Chiusano](https://twitter.com/pchiusano) authors of the book [Functional Programming in Scala](https://www.manning.com/books/functional-programming-in-scala)
-![Scale By the Bay 2018](/img/via/scale_by_the_bay_2018_4.JPG)
+![Scale By the Bay 2018](scale_by_the_bay_2018_4.JPG)
Top left: [Eugene Yokota (Scala/SBT Team)](https://twitter.com/eed3si9n) , Top right: [Justin Kaeser (Jetbrains)](https://twitter.com/ebenwert),
Bottom left: [Cliff Click](https://twitter.com/cliff_click), Bottom right: [Julien Le Dem (Apache Parquet & Arrow)](https://twitter.com/J_)
-![Scale By the Bay 2018](/img/via/scale_by_the_bay_2018_3.JPG)
+![Scale By the Bay 2018](scale_by_the_bay_2018_3.JPG)
Top: [John De Goes (Creator of ZIO) ](https://twitter.com/jdegoes) & [Itamar Ravid (Core contributor to ZIO)](https://twitter.com/itrvd),
Bottom: [Jon Pretty (Scala Center Advisory board chair)](https://twitter.com/propensive/)
@@ -76,5 +79,5 @@ I am humbled that I got a chance to meet so many great people at this conference
I want to thank all speakers and attendees at this event, especially I want to thank [Alexy Khrabrov](https://twitter.com/ChiefScientist) for putting together such a great event, welcoming me to the bay area and helping me be part of the great community we have in the bay area and this conference.
-{{< youtube iTeh-wnvweQ >}}
+{{ youtube(id="iTeh-wnvweQ") }}
diff --git a/static/img/via/scale_by_the_bay_2018_1.JPG b/content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_1.JPG
similarity index 100%
rename from static/img/via/scale_by_the_bay_2018_1.JPG
rename to content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_1.JPG
diff --git a/static/img/via/scale_by_the_bay_2018_2.JPG b/content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_2.JPG
similarity index 100%
rename from static/img/via/scale_by_the_bay_2018_2.JPG
rename to content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_2.JPG
diff --git a/static/img/via/scale_by_the_bay_2018_3.JPG b/content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_3.JPG
similarity index 100%
rename from static/img/via/scale_by_the_bay_2018_3.JPG
rename to content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_3.JPG
diff --git a/static/img/via/scale_by_the_bay_2018_4.JPG b/content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_4.JPG
similarity index 100%
rename from static/img/via/scale_by_the_bay_2018_4.JPG
rename to content/post/scale-by-the-bay-2018-san-francisco/scale_by_the_bay_2018_4.JPG
diff --git a/static/img/via/scalebythebay_2018_header.jpg b/content/post/scale-by-the-bay-2018-san-francisco/scalebythebay_2018_header.jpg
similarity index 100%
rename from static/img/via/scalebythebay_2018_header.jpg
rename to content/post/scale-by-the-bay-2018-san-francisco/scalebythebay_2018_header.jpg
diff --git a/static/img/via/scalebythebay_2018_keynotes.jpg b/content/post/scale-by-the-bay-2018-san-francisco/scalebythebay_2018_keynotes.jpg
similarity index 100%
rename from static/img/via/scalebythebay_2018_keynotes.jpg
rename to content/post/scale-by-the-bay-2018-san-francisco/scalebythebay_2018_keynotes.jpg
diff --git a/content/post/unicomp-new-model-m-keyboard.md b/content/post/unicomp-new-model-m-keyboard/index.md
similarity index 92%
rename from content/post/unicomp-new-model-m-keyboard.md
rename to content/post/unicomp-new-model-m-keyboard/index.md
index e7b3c9a..f74ac25 100644
--- a/content/post/unicomp-new-model-m-keyboard.md
+++ b/content/post/unicomp-new-model-m-keyboard/index.md
@@ -1,21 +1,20 @@
+++
title = "Unicomp New Model M Keyboard"
-date = 2020-12-18T20:08:42-08:00
description = "Unicomp new Model M keyboard is the latest version of the classic and fabulous IBM Model M keyboard that came out earlier this year. This blog post is my unboxing and review of this timeless keyboard."
-featured = false
-draft = false
-toc = false
-featureImage = "/img/unicomp_new_model_m.png"
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 30
-codeLineNumbers = false
-figurePositionShow = false
-keywords = ["keyboard", "keyboards", "mechanical keyboards", "buckling spring", "buckling spring keyboard", "ibm model m", "ibm keyboard", "unicomp", "unicomp model m", "unicomp new model m", "unicomp new model m keyboard", "model m"]
+date = 2020-12-18T20:08:42-08:00
+
+[taxonomies]
tags = ["keyboards"]
-categories = ["hardware"]
+categories = ["Hardware"]
+
+[extra]
+social_media_card = "unicomp_new_model_m.png"
+toc = true
+keywords = ["keyboard", "keyboards", "mechanical keyboards", "buckling spring", "buckling spring keyboard", "ibm model m", "ibm keyboard", "unicomp", "unicomp model m", "unicomp new model m", "unicomp new model m keyboard", "model m"]
+++
+![Unicomp Model M](unicomp_new_model_m.png)
+
Unicomp new Model M keyboard is the latest version of the classic and fabulous IBM Model M keyboard that came out earlier this year. This blog post is my unboxing and review of this timeless keyboard.
My favorite keyboard of all time was the [IBM Model M keyboard](https://en.wikipedia.org/wiki/Model_M_keyboard). Through out the 1980s and the 1990s I would exclusively use this keyboard. In fact as I type this blog post I can confirm I still have 3 of them in my garage back in London, England.
@@ -30,15 +29,15 @@ When IBM decided to stop manufacturing keyboards, a company called Lexmark bough
This is how it was delivered:
-![Unicomp New Model M box](/img/unicomp_model_m_box.png)
+![Unicomp New Model M box](unicomp_model_m_box.png)
When the package arrived I could feel the keyboard moving inside the box, but when I opened the box I saw how well it was packed:
-![Unicomp New Model M opened box](/img/unicomp_model_m_open_box.png)
+![Unicomp New Model M opened box](unicomp_model_m_open_box.png)
I took it out of its box and removed all packaging material it was wrapped in:
-![Unicomp New Model M Keyboard](/img/unicomp_model_m_out_of_box.png)
+![Unicomp New Model M Keyboard](unicomp_model_m_out_of_box.png)
## Review
@@ -52,7 +51,7 @@ I am thoroughly enjoying using this keyboard. Its typing feel and size are on pa
When I went to place my order on Unicomp website they only had a windows version of the new Model M listed. Whilst that will work fine with macOS, it does have some features missing compared to a keyboard that has dedicated support for macOS, such as volume control, music play/stop/previous track /next track keys. Good news is I called Unicomp and spoke to Troy about this and he was kind enought to tell me I can place an order and request a custom configuration at a small fee to have the extra macOS features added. I did that and my keyboard has all the extra macOS keys functioning as expected. It even has the window key replaced with the macOS command key.
-![Unicomp New Model M with macOS layout](/img/unicomp_model_m_mac_keys.png)
+![Unicomp New Model M with macOS layout](unicomp_model_m_mac_keys.png)
### Unicomp quality of service
diff --git a/static/img/unicomp_model_m_box.png b/content/post/unicomp-new-model-m-keyboard/unicomp_model_m_box.png
similarity index 100%
rename from static/img/unicomp_model_m_box.png
rename to content/post/unicomp-new-model-m-keyboard/unicomp_model_m_box.png
diff --git a/static/img/unicomp_model_m_mac_keys.png b/content/post/unicomp-new-model-m-keyboard/unicomp_model_m_mac_keys.png
similarity index 100%
rename from static/img/unicomp_model_m_mac_keys.png
rename to content/post/unicomp-new-model-m-keyboard/unicomp_model_m_mac_keys.png
diff --git a/static/img/unicomp_model_m_open_box.png b/content/post/unicomp-new-model-m-keyboard/unicomp_model_m_open_box.png
similarity index 100%
rename from static/img/unicomp_model_m_open_box.png
rename to content/post/unicomp-new-model-m-keyboard/unicomp_model_m_open_box.png
diff --git a/static/img/unicomp_model_m_out_of_box.png b/content/post/unicomp-new-model-m-keyboard/unicomp_model_m_out_of_box.png
similarity index 100%
rename from static/img/unicomp_model_m_out_of_box.png
rename to content/post/unicomp-new-model-m-keyboard/unicomp_model_m_out_of_box.png
diff --git a/static/img/unicomp_new_model_m.png b/content/post/unicomp-new-model-m-keyboard/unicomp_new_model_m.png
similarity index 100%
rename from static/img/unicomp_new_model_m.png
rename to content/post/unicomp-new-model-m-keyboard/unicomp_new_model_m.png
diff --git a/content/post/using-pyenv-for-python-projects.md b/content/post/using-pyenv-for-python-projects.md
index 65a3f22..6799b49 100644
--- a/content/post/using-pyenv-for-python-projects.md
+++ b/content/post/using-pyenv-for-python-projects.md
@@ -1,12 +1,15 @@
+++
title = "Using pyenv for Python projects"
-date = "2015-04-13T09:06:03-05:00"
-draft = false
-toc = true
description = "Using pyenv to manage your virtual environments makes working on multiple projects, each using a different version of python a breeze."
-keywords = ["python", "pyenv", "centos", "macos"]
-tags = ["python", "pyenv", "centos", "macos"]
-categories = ["development"]
+date = "2015-04-13T09:06:03-05:00"
+
+[taxonomies]
+tags = ["python"]
+categories = ["Developer Tools"]
+
+[extra]
+toc = true
+keywords = ["python", "pyenv"]
+++
Using [pyenv][3] to manage your virtual environments makes working on multiple projects, each using a different version of python a breeze.
@@ -19,13 +22,13 @@ Here some simple notes on how I setup and use [pyenv][3] :
**Install using [homebrew][5]**
-```
-$ brew install pyenv pyenv-virtualenv
+```bash
+brew install pyenv pyenv-virtualenv
```
**Update your shell profile (.bashrc or .zshrc) adding the following to it (and restart your terminal)**
-```
+```bash
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
```
@@ -35,47 +38,47 @@ if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -
**Checkout from github**
-```
-$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
-$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
+```bash
+git clone https://github.com/yyuu/pyenv.git ~/.pyenv
+git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
```
**Update your shell profile (.bashrc or .zshrc) adding the following to it (and restart your terminal)**
-```
-$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
-$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
-$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
-$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
+```bash
+echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
+echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
+echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
+echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
```
## Using pyenv ##
**To install a new version of [Python][6]**
-```
-$ pyenv install
-$ pyenv rehash
+```bash
+pyenv install
+pyenv rehash
```
**To get a list of [Python][6] versions available**
-```
-$ pyenv install -l
+```bash
+pyenv install -l
```
**To create a new virtual environment**
-```
-$ pyenv virtualenv [pyenv-version] [virtualenv-name]
+```bash
+pyenv virtualenv [pyenv-version] [virtualenv-name]
```
**To use your new virtual environment within your project**
1. Change to your projects root directory
1. Run:
-```
-$ pyenv local [virtualenv-name]
+```bash
+pyenv local [virtualenv-name]
```
Note that this is done only the first time you go to your project directory. The wonderful thing about [pyenv][3] is in future when you change directory to your project directory, it will be automatically activated your virtualenv for you.
diff --git a/content/projects/_index.md b/content/projects/_index.md
new file mode 100644
index 0000000..4ee8429
--- /dev/null
+++ b/content/projects/_index.md
@@ -0,0 +1,10 @@
++++
+title = "Projects"
+sort_by = "weight"
+template = "cards.html"
+insert_anchor_links = "left"
+
+[extra]
+show_reading_time = false
+quick_navigation_buttons = true
++++
diff --git a/content/projects/scaladex-nvim/index.md b/content/projects/scaladex-nvim/index.md
new file mode 100644
index 0000000..b0548c7
--- /dev/null
+++ b/content/projects/scaladex-nvim/index.md
@@ -0,0 +1,33 @@
++++
+title = "scaladex.nvim"
+description = "Lua Library and Neovim Plugin to search scaladex for scala packages."
+weight = 2
+
+[taxonomies]
+tags = ["Scala", "lua", "neovim"]
+categories = ["Project"]
+
+[extra]
+local_image = "projects/scaladex-nvim/scala-logo.png"
+social_media_card = "scala-logo.png"
+toc = true
+keywords = ["Scala", "neovim", "lua", "telescope", "scaladex"]
++++
+
+![scaladex.nvim](scala-logo.png)
+
+# Overview
+
+I created a lua library that is able to search for scala pages on [Scaladex](https://index.scala-lang.org).
+
+I then used it to create a [Neovim](https://neovim.io) plugin and [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) plugin so that when I am coding using Neovim I can search for and add packages as dependencies.
+
+## Demo and Video Tutorial on using scaladex.nvim
+
+{{ peertube(id="44bD8ASpSkzmKifDBNMBkr") }}
+
+## Links
+
+- Repository:
+ - README:
+
diff --git a/content/projects/scaladex-nvim/scala-logo.png b/content/projects/scaladex-nvim/scala-logo.png
new file mode 100644
index 0000000..47558b5
Binary files /dev/null and b/content/projects/scaladex-nvim/scala-logo.png differ
diff --git a/content/projects/scalanews/index.md b/content/projects/scalanews/index.md
new file mode 100644
index 0000000..176844d
--- /dev/null
+++ b/content/projects/scalanews/index.md
@@ -0,0 +1,30 @@
++++
+title = "Scala News"
+description = "Scala bloggers directory and news feed using RSS"
+weight = 1
+
+[taxonomies]
+tags = ["Scala", "Typelevel"]
+categories = ["Project"]
+
+[extra]
+local_image = "projects/scalanews/scalanews.png"
+social_media_card = "scalanews.png"
+toc = true
+keywords = ["Scala", "Typelevel", "Bloggers", "RSS", "News"]
++++
+
+![Scala News](scalanews.png)
+
+# Overview
+
+I wanted to create a directory of all bloggers who write about Scala Programming language with links to their RSS Feeds.
+
+Using this directory I have created a CLI tool using Scala, Typelevel stack (cats-effect, fs2, http4s, decline, Laika) to use the rss feed links to generate the latest news in the scala community that I publish periodically on [www.scalanews.net](https://www.scalanews.net/).
+
+## Links
+
+- Website:
+ - About Page:
+- Repository:
+ - README:
diff --git a/content/projects/scalanews/scalanews.png b/content/projects/scalanews/scalanews.png
new file mode 100644
index 0000000..88ae5db
Binary files /dev/null and b/content/projects/scalanews/scalanews.png differ
diff --git a/content/projects/zio-actors/ZIO.png b/content/projects/zio-actors/ZIO.png
new file mode 100644
index 0000000..5c03841
Binary files /dev/null and b/content/projects/zio-actors/ZIO.png differ
diff --git a/content/projects/zio-actors/index.md b/content/projects/zio-actors/index.md
new file mode 100644
index 0000000..af47503
--- /dev/null
+++ b/content/projects/zio-actors/index.md
@@ -0,0 +1,35 @@
++++
+title = "ZIO Actors"
+description = "A High performance, purely functional library for building, composing, and supervising typed actors based on ZIO using Scala."
+weight = 3
+
+[taxonomies]
+tags = ["actor model", "concurrency", "distributed systems", "scala", "functional programming", "zio"]
+categories = ["Project"]
+
+[extra]
+local_image = "projects/zio-actors/ZIO.png"
+social_media_card = "ZIO.png"
+toc = true
+keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "zio actors","swift language actors", "functional programming", "fp"]
++++
+
+![Scala News](ZIO.png)
+
+# Overview
+
+ZIO Actors is a high-performance, purely functional library for building, composing, and supervising typed actors based on ZIO using Scala.
+
+Original creator of this project, though I do not maintain it anymore.
+
+## My blog post and Talk about ZIO Actors
+
+[see here](/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/)
+
+## Links
+
+- Repository:
+ - README:
+- Documentation:
+
+
diff --git a/content/resume.md b/content/resume.md
index 599ca54..a39d67f 100644
--- a/content/resume.md
+++ b/content/resume.md
@@ -1,11 +1,11 @@
+++
title = "Resume"
-date = "2018-04-16T09:16:07-05:00"
description = "Salar Rahmanian Resume"
+date = "2018-04-16T09:16:07-05:00"
+
+[extra]
+isso = false
keywords = ["Salar", "Rahmanian", "Salar Rahmanian", "Resume", "CV"]
-showReadTime = false
-showDate = false
-comments = false
+++
# Salar Rahmanian #
## My Location ##
@@ -93,17 +93,19 @@ You can find more of my projects on my [GitHub](https://github.com/softinio?tab=
I have a passion to learn and network with like minded people with similar interests in technology. Hence I am very active in the conference, meetup and open source communities:
-#### Current Meetups ####
+#### Past Meetups ####
+
+##### Silicon Valley Nix / NixOS User Group #####
+
+Organizer from *2022* to *2023*:
##### Swift Language User Group (San Francisco) #####
-Organizer since *2022*:
+Organizer from *2022* to *2023*:
##### Bay Area Haskell & Functional Programming User Group #####
-Organizer since *2021*:
-
-#### Past Meetups ####
+Organizer from *2021* to *2023*:
##### San Francisco Java User Group Meetup #####
diff --git a/content/subscribe/index.md b/content/subscribe/index.md
new file mode 100644
index 0000000..934e29b
--- /dev/null
+++ b/content/subscribe/index.md
@@ -0,0 +1,10 @@
++++
+title = "Subscribe"
+template = "subscribe.html"
+path = "subscribe"
+
+[extra]
+isso = false
+quick_navigation_buttons = true
++++
+
diff --git a/content/talks/_index.md b/content/talks/_index.md
new file mode 100644
index 0000000..4a8eef4
--- /dev/null
+++ b/content/talks/_index.md
@@ -0,0 +1,11 @@
++++
+title = "Talks"
+sort_by = "weight"
+template = "cards.html"
+insert_anchor_links = "left"
+
+[extra]
+show_reading_time = false
+quick_navigation_buttons = true
++++
+
diff --git a/content/post/acting-lessons-for-scala-engineers-with-akka-and-zio.md b/content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/index.md
similarity index 71%
rename from content/post/acting-lessons-for-scala-engineers-with-akka-and-zio.md
rename to content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/index.md
index 7862d23..568ebe9 100644
--- a/content/post/acting-lessons-for-scala-engineers-with-akka-and-zio.md
+++ b/content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/index.md
@@ -1,27 +1,31 @@
+++
title = "Acting Lessons for Scala Engineers With Akka and Zio"
-date = 2021-04-10T10:20:09-07:00
description = "Salar Rahmanian's talk at Scale By the Bay conference 2020 on Akka Actors and ZIO Actors"
-featured = true
-draft = false
-toc = false
-featureImage = "/img/sbtb2020.jpg"
-thumbnail = ""
-shareImage = ""
-codeMaxLines = 30
-codeLineNumbers = false
-figurePositionShow = false
+date = 2021-04-10T10:20:09-07:00
+weight = 3
+
+[taxonomies]
+tags = ["actor model", "concurrency", "distributed systems", "scala", "functional programming", "conference", "talks"]
+categories = ["Talks"]
+
+[extra]
+local_image = "talks/acting-lessons-for-scala-engineers-with-akka-and-zio/sbtb2020.webp"
+social_media_card = "sbtb2020.jpg"
+toc = true
keywords = ["concurrent", "concurrency", "actor model", "actor", "actors", "threads", "petri net", "coroutines", "distributed", "akka", "erlang", "elixir", "akka.net", "microsoft orleans", "orleans", "zio", "zio-actors", "zio actors","swift language actors", "functional programming", "fp", "tech talk", "talk", "conference", "scale by the bay", "scala by the bay", "by the bay", "functional.tv", "sf scala"]
-tags = ["actor model", "concurrency", "distributed systems", "scala", "zio", "zio-actors", "functional programming", "conference", "talk"]
-categories = ["concurrency", "distributed systems", "scala", "functional programming", "conference", "talk"]
+++
+![](sbtb2020.jpg)
+
In November 2020 I had the great privilege to do a [Talk at Scale By The Bay Conference](https://scalebythebay2020.sched.com/event/e54O/acting-lessons-for-scala-engineers-with-akka-and-zio).
-### Here is the recording of my talk
+### Recording of my talk
-{{< youtube AQXBlbkf9wc >}}
+{{ youtube(id="AQXBlbkf9wc") }}
+### Slides
+
+Slides for my talk can be found [here](https://github.com/softinio/talks/blob/master/SBTB2020/acting-lessons-for-scala-engineers-with-akka-and-zio.pdf).
### I also wrote three blogs posts as a companion to my talk
diff --git a/static/img/sbtb2020.jpg b/content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/sbtb2020.jpg
similarity index 100%
rename from static/img/sbtb2020.jpg
rename to content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/sbtb2020.jpg
diff --git a/content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/sbtb2020.webp b/content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/sbtb2020.webp
new file mode 100644
index 0000000..8a9e646
Binary files /dev/null and b/content/talks/acting-lessons-for-scala-engineers-with-akka-and-zio/sbtb2020.webp differ
diff --git a/content/talks/elevating-python-development-with-nix/Elevating_Python_Development_with_Nix_Package_Manager.png b/content/talks/elevating-python-development-with-nix/Elevating_Python_Development_with_Nix_Package_Manager.png
new file mode 100644
index 0000000..e4ecac0
Binary files /dev/null and b/content/talks/elevating-python-development-with-nix/Elevating_Python_Development_with_Nix_Package_Manager.png differ
diff --git a/content/talks/elevating-python-development-with-nix/index.md b/content/talks/elevating-python-development-with-nix/index.md
new file mode 100644
index 0000000..1c24744
--- /dev/null
+++ b/content/talks/elevating-python-development-with-nix/index.md
@@ -0,0 +1,29 @@
++++
+title = "Elevating Python Development with Nix Package Manager"
+description = "Salar Rahmanian's talk at PyBay 2023"
+date = 2023-10-14
+weight = 2
+
+[taxonomies]
+tags = ["Nix", "NixOS", "Python", "functional programming", "conference", "talks"]
+categories = ["Talks"]
+
+[extra]
+local_image = "talks/elevating-python-development-with-nix/Elevating_Python_Development_with_Nix_Package_Manager.png"
+social_media_card = "Elevating_Python_Development_with_Nix_Package_Manager.png"
+toc = true
+keywords = ["Nix", "NixOS", "Python", "devenv", "flakes", "functional programming", "fp", "tech talk", "talk", "conference", "PyBay", "SF Python", "sfpython"]
++++
+
+![](Elevating_Python_Development_with_Nix_Package_Manager.png)
+
+In October 2023 I had the great privilege to do a talk at PyBay 2023 in San Francisco, California.
+
+### Recording of my talk
+
+{{ youtube(id="AJs_izrEBOA") }}
+
+### Slides
+
+Slides for my talk can be found [here](https://github.com/softinio/talks/blob/master/PyBay2023/pybay2023_slides.pdf).
+
diff --git a/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/index.md b/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/index.md
new file mode 100644
index 0000000..e933efe
--- /dev/null
+++ b/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/index.md
@@ -0,0 +1,29 @@
++++
+title = "Next-Level Diagnostics for Async & Concurrent Errors with ZIO"
+description = "Salar Rahmanian's talk with John A De Goes at Scale By The Bay 2019"
+date = 2019-11-13
+weight = 4
+
+[taxonomies]
+tags = ["concurrency", "distributed systems", "scala", "functional programming", "conference", "talks", "ZIO"]
+categories = ["Talks"]
+
+[extra]
+local_image = "talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/sbtb2019.png"
+social_media_card = "sbtb2019.png"
+toc = true
+keywords = ["concurrent", "concurrency", "coroutines", "distributed", "zio", "functional programming", "fp", "tech talk", "talk", "conference", "scale by the bay", "scala by the bay", "by the bay", "functional.tv", "sf scala"]
++++
+
+![](sbtb2019.png)
+
+In November 2019 I had the great privilege to do a [Talk at Scale By The Bay Conference](https://scalebythebay2019.sched.com/event/RoSt/next-level-diagnostics-for-async-concurrent-errors-with-zio) with John A De Goes.
+
+### Recording of my talk
+
+{{ youtube(id="MdYKEwuWR4U") }}
+
+### Slides
+
+Slides for my talk can be found [here](slides.pdf).
+
diff --git a/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/sbtb2019.png b/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/sbtb2019.png
new file mode 100644
index 0000000..dc72d45
Binary files /dev/null and b/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/sbtb2019.png differ
diff --git a/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/slides.pdf b/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/slides.pdf
new file mode 100644
index 0000000..bfa4c15
Binary files /dev/null and b/content/talks/next-level-diagnostics-for-async-and-concurrent-errors-with-zio/slides.pdf differ
diff --git a/content/talks/streamline-your-development-workflow/index.md b/content/talks/streamline-your-development-workflow/index.md
new file mode 100644
index 0000000..ea938f5
--- /dev/null
+++ b/content/talks/streamline-your-development-workflow/index.md
@@ -0,0 +1,37 @@
++++
+title = "Streamline Your Development Workflow: Harnessing the Power of NixOS and Nix Package"
+description = "Salar Rahmanian's talk at Scale By The Bay 2023"
+date = 2023-10-14
+weight = 1
+
+[taxonomies]
+tags = ["Nix", "NixOS", "Python", "functional programming", "conference", "talks"]
+categories = ["Talks"]
+
+[extra]
+local_image = "talks/streamline-your-development-workflow/sbtb2023.png"
+social_media_card = "sbtb2023.png"
+toc = true
+keywords = ["Nix", "NixOS", "Python", "devenv", "flakes", "functional programming", "fp", "tech talk", "talk", "conference", "scale by the bay", "scala by the bay", "by the bay", "functional.tv", "sf scala"]
++++
+
+![](sbtb2023.png)
+
+In November 2023 I had the great privilege to do a talk at [Scale By The Bay 2023](https://www.scale.bythebay.io/post/salar-rahmanian-streamline-your-development-workflow-harnessing-the-power-of-nixos-and-nix-package) in San Francisco, California.
+
+### Recording of my talk
+
+{{ youtube(id="Qv3Y23RjJa0") }}
+
+### Pre-Conference Introduction to talk
+
+{{ youtube(id="LVadoYGDvI8") }}
+
+### Post Conference Interview
+
+{{ youtube(id="B9wpkWdE368") }}
+
+### Slides
+
+Slides for my talk can be found [here](https://github.com/softinio/talks/blob/master/SBTB2023/sbtb2023_slides.pdf).
+
diff --git a/content/talks/streamline-your-development-workflow/sbtb2023.png b/content/talks/streamline-your-development-workflow/sbtb2023.png
new file mode 100644
index 0000000..9b1127e
Binary files /dev/null and b/content/talks/streamline-your-development-workflow/sbtb2023.png differ
diff --git a/content/til/_index.md b/content/til/_index.md
new file mode 100644
index 0000000..de3da8a
--- /dev/null
+++ b/content/til/_index.md
@@ -0,0 +1,12 @@
++++
+paginate_by = 5
+path = "/til"
+title = "Things I've Learned"
+sort_by = "date"
+template = "section.html"
+insert_anchor_links = "left"
+
+[extra]
+show_previous_next_article_links = true
++++
+
diff --git a/content/til/configuring-github-pages-with-a-custom-domain.md b/content/til/configuring-github-pages-with-a-custom-domain.md
new file mode 100644
index 0000000..b413ab1
--- /dev/null
+++ b/content/til/configuring-github-pages-with-a-custom-domain.md
@@ -0,0 +1,31 @@
++++
+title = "Configuring Github Pages With a Custom Domain"
+date = 2023-01-14T16:45:33-08:00
+
+[taxonomies]
+tags = ["github"]
+categories = [ "TIL" ]
+
+[extra]
+toc = true
+keywords = ["github pages"]
++++
+
+To setup my custom domain I went through the following steps:
+
+1. *Verify Domain:* I followed [these steps](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages) to verify. Note that this was done using my GitHub accounts settings and not the repositories settings.
+2. *Configuring my subdomain:* Next I configured my subdomain to be used as my custom domain with GitHub pages by following [these steps](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-a-subdomain) which involved adding a CNAME record to my DNS settings with my domain registrar. Note that as I was using a subdomain adding a CNAME record was all that was needed (however if I was to use an apex domain, I would have needed to add A and AAAA records too pointing to GitHub's ip addresses).
+3. *Add CNAME file:* You need to add a file called `CNAME` to the root of your generated static site that contains your host name only (i.e. for this site `til.softinio`). As I use Hugo, I put this in the `static` directory as when the site is created it will be put in the root. Here is an [example](https://github.com/softinio/til/blob/main/static/CNAME).
+4. *Configuring GitHub Pages:* Go to your repositories settings and select pages. Enter your domain name, save it and click check. Tick the box to enforce `https`.
+
+## Notes
+
+- This TIL does not cover setting up GitHub actions to build and deploy your code. Here is a [sample](https://github.com/softinio/til/tree/main/.github/workflows).
+- You need to have your site deployed at least once so that the `gh-pages` branch is created so that you can set the site source branch in your repositories pages settings.
+- To make sure your GitHub actions is able to create the `gh-pages` branch, go to your repositories settings, then click `Actions` then `General` and under the `workflow permissions` section make sure the `read and write permissions` is selected and saved.
+
+## References
+
+- [Hugo Documentation for hosting on GitHub](https://gohugo.io/hosting-and-deployment/hosting-on-github/)
+
+
diff --git a/content/til/converting-html-to-markdown-using-markdownify.md b/content/til/converting-html-to-markdown-using-markdownify.md
new file mode 100644
index 0000000..f1d4de4
--- /dev/null
+++ b/content/til/converting-html-to-markdown-using-markdownify.md
@@ -0,0 +1,31 @@
++++
+title = "Converting HTML to Markdown using Markdownify"
+date = 2023-12-26
+
+[taxonomies]
+tags = ["markdown"]
+categories = [ "TIL" ]
+
+[extra]
+toc = true
+keywords = ["markdown", "html", "convert", "python", "nix"]
++++
+
+I had some HTML content that I wanted to convert to markdown.
+
+The simplest tool I found to do this effectively was a python utility called [Markdownify](https://pypi.org/project/markdownify/).
+
+I used Nix Shell to install it:
+
+```bash
+nix-shell -p python311Packages.markdownify
+```
+
+And to do the conversion I just did:
+
+```bash
+markdownify myfile.html > myfile.md
+```
+
+where `myfile.html` is the name of the file I wanted to convert and `myfile.md` in the name of the markdown file it got converted to.
+
diff --git a/content/til/creating-a-native-image-for-a-scala-and-typelevel-project-using-graalvm.md b/content/til/creating-a-native-image-for-a-scala-and-typelevel-project-using-graalvm.md
new file mode 100644
index 0000000..ba7fbfa
--- /dev/null
+++ b/content/til/creating-a-native-image-for-a-scala-and-typelevel-project-using-graalvm.md
@@ -0,0 +1,14 @@
++++
+title = "Creating a native image for a scala and typelevel project using graalvm"
+date = 2024-01-20
+
+[taxonomies]
+tags = ["scala", "typelevel"]
+categories = [ "TIL" ]
+
+[extra]
+toc = true
+keywords = ["scala", "typelevel", "graalvm", "nix", "binary", "native image"]
++++
+
+
diff --git a/data/.keep b/data/.keep
deleted file mode 100644
index e69de29..0000000
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..a8a6541
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,45 @@
+{
+ "nodes": {
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1707956935,
+ "narHash": "sha256-ZL2TrjVsiFNKOYwYQozpbvQSwvtV/3Me7Zwhmdsfyu4=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "a4d4fe8c5002202493e87ec8dbc91335ff55552c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "nixpkgs": "nixpkgs",
+ "theme": "theme"
+ }
+ },
+ "theme": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1704495088,
+ "narHash": "sha256-ZfN0qTw2yO+/zU5hkWlB/lOXSJPdcFfVduYUOoSor3A=",
+ "owner": "welpo",
+ "repo": "tabi",
+ "rev": "7fa208a2a5dffbc83dd2b71de1e804c2f2eaad01",
+ "type": "github"
+ },
+ "original": {
+ "owner": "welpo",
+ "repo": "tabi",
+ "rev": "7fa208a2a5dffbc83dd2b71de1e804c2f2eaad01",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..f109024
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,56 @@
+{
+ description = "Softinio's Zola website";
+
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
+ theme = {
+ url = "github:welpo/tabi/7fa208a2a5dffbc83dd2b71de1e804c2f2eaad01";
+ flake = false;
+ };
+ };
+
+ outputs = { self, nixpkgs, theme }:
+ let
+ themeName = ((builtins.fromTOML (builtins.readFile "${theme}/theme.toml")).name);
+ allSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+ forAllSystems = nixpkgs.lib.genAttrs allSystems;
+ nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; });
+ in
+ {
+ packages = forAllSystems (system:
+ let
+ pkgs = nixpkgsFor.${system};
+ in {
+ default = pkgs.stdenv.mkDerivation rec {
+ name = "softinio-${system}";
+ version = "0.1";
+ src = ./.;
+ nativeBuildInputs = with pkgs; [ nodePackages_latest.wrangler zola ];
+ configurePhase = ''
+ mkdir -p themes
+ ln -snf "${theme}" "themes/${themeName}"
+ '';
+ buildPhase = ''
+ zola build
+ '';
+ installPhase = ''
+ mkdir -p $out
+ cp -r public/* $out
+ '';
+ };
+ });
+
+ devShells = forAllSystems (system:
+ let
+ pkgs = nixpkgsFor.${system};
+ in {
+ default = pkgs.mkShell {
+ buildInputs = with pkgs; [ nodePackages_latest.wrangler zola ];
+ shellHook = ''
+ mkdir -p themes
+ ln -snf "${theme}" "themes/${themeName}"
+ '';
+ };
+ });
+ };
+}
diff --git a/go.mod b/go.mod
deleted file mode 100644
index b9612ec..0000000
--- a/go.mod
+++ /dev/null
@@ -1,5 +0,0 @@
-module softinio.com
-
-go 1.18
-
-require github.com/softinio/hugo-clarity v0.0.0-20220804231030-5179510a03ea // indirect
diff --git a/go.sum b/go.sum
deleted file mode 100644
index 2ec3931..0000000
--- a/go.sum
+++ /dev/null
@@ -1,2 +0,0 @@
-github.com/softinio/hugo-clarity v0.0.0-20220804231030-5179510a03ea h1:fJw3f89X83BAkTnwM8rP5lihcw3Z8gSOc3pNso3IRa4=
-github.com/softinio/hugo-clarity v0.0.0-20220804231030-5179510a03ea/go.mod h1:FhIE2pdxA/KkNA0FW425TKxr/DWrtS6hNiVZEHIg5oY=
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
deleted file mode 100644
index baad8fe..0000000
--- a/layouts/_default/rss.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-{{- $pctx := . -}}
-{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
-{{- $pages := slice -}}
-{{- if or $.IsHome $.IsSection -}}
-{{- $pages = $pctx.RegularPages -}}
-{{- else -}}
-{{- $pages = $pctx.Pages -}}
-{{- end -}}
-{{- $limit := .Site.Config.Services.RSS.Limit -}}
-{{- if ge $limit 1 -}}
-{{- $pages = $pages | first $limit -}}
-{{- end -}}
-{{- printf "" | safeHTML }}
-
-
- {{.Site.Author.name}}
- {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}
- {{ .Permalink }}
- Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}
- Hugo -- gohugo.io{{ with .Site.LanguageCode }}
- {{.}}{{end}}{{ with .Site.Author.email }}
- {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }}
- {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }}
- {{.}}{{end}}{{ if not .Date.IsZero }}
- {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }}
- {{- with .OutputFormats.Get "RSS" -}}
- {{ printf "" .Permalink .MediaType | safeHTML }}
- {{- end -}}
- {{ range where (where .Site.Pages ".Section" "post") "Kind" "page" }}
-
- {{.Site.Author.name}}
- {{ .Title }}
- {{ .Permalink }}
- {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
- {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}
- {{ .Permalink }}
- {{ .Content | html }}
-
- {{ end }}
-
-
-
diff --git a/layouts/_default/sitemap.xml b/layouts/_default/sitemap.xml
deleted file mode 100644
index d368c04..0000000
--- a/layouts/_default/sitemap.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-{{ printf "" | safeHTML }}
-
- {{ range where .Data.Pages "Params.sitemap_exclude" "ne" true }}
- {{- if .Permalink -}}
-
- {{ .Permalink }}{{ if not .Lastmod.IsZero }}
- {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}{{ end }}{{ with .Sitemap.ChangeFreq }}
- {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
- {{ .Sitemap.Priority }}{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
- {{ end }}
- {{ end }}
-
- {{- end -}}
- {{ end }}
-
-
diff --git a/layouts/partials/comments.html b/layouts/partials/comments.html
deleted file mode 100644
index 78f6753..0000000
--- a/layouts/partials/comments.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-{{ if .Site.Params.giscus.enable }}
-
You can subscribe to my blog via my email newsletter on Substack and receive notifications when I publish new blogs or have other announcements to make.
+
Your email will only be used for this purpose and nothing else, so no spam or advertising or anything just content.