summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustaf Rydholm <gustaf.rydholm@gmail.com>2024-05-09 12:50:34 +0200
committerGustaf Rydholm <gustaf.rydholm@gmail.com>2024-05-09 12:50:34 +0200
commitf80a4ff624a3bf42e314422e01e40e8c718c1389 (patch)
tree00dae826da8eeae6fcf99fe1e3377bf0b4941d0a
parentc35a6092de4b1263d9cf47c50332fbcf4f238e1e (diff)
Update text in cv
-rw-r--r--content/cv.md139
1 files changed, 81 insertions, 58 deletions
diff --git a/content/cv.md b/content/cv.md
index ac84d18..f26312d 100644
--- a/content/cv.md
+++ b/content/cv.md
@@ -22,6 +22,7 @@ A short summery of some of my most relevant technical skills.
| C | Superficial |
| Fennel | Proficient |
| Haskell | Intermediate |
+| Kotlin | Fluent |
| Lua | Fluent |
| Ocaml | Basic |
| Python | Fluent |
@@ -29,27 +30,29 @@ A short summery of some of my most relevant technical skills.
| Shell | Fluent |
| VHDL | Basic |
-In my spare time I am focusing on improving my skills in Haskell and Ocaml.
+In my spare time I am focusing on improving my skills in Haskell and Ocaml. I am also
+keen on trying out Julia, and compare it to Python for data science/machine learning
+projects.
#### Markup
-| Language | Level |
-| -------- | ------------ |
-| HTML | Proficient |
-| LaTeX | Fluent |
-| markdown | Fluent |
+| Language | Level |
+| -------- | ---------- |
+| HTML | Proficient |
+| LaTeX | Fluent |
+| markdown | Fluent |
#### Databases
-| Type | Implementation |
-| ------------ | --------------------- |
-| Cache | Redis |
-| Graph | ArangoDB |
-| Index | Elasticsearch |
-| Message bus | Kafka, SQS |
-| NoSQL | MongoDB |
-| SQL | Postgres, TimescaleDB |
-| Vector DB | Qdrant |
+| Type | Implementation |
+| ----------- | --------------------- |
+| Cache | Redis |
+| Graph | ArangoDB |
+| Index | Elasticsearch |
+| Message bus | Kafka, SQS |
+| NoSQL | MongoDB |
+| SQL | Postgres, TimescaleDB |
+| Vector DB | Qdrant |
I would like to try out [Nats](https://nats.io/) as a message broker,
[skytable](https://github.com/skytable/skytable) as NoSQL database,
@@ -89,9 +92,12 @@ Unfortunately, I use macOS for work.
I use Neovim for all development, together with dwm as a tiling
window manager, and st as the terminal of choice. I am very happy with this
-setup, but would like to improve the workflow with increased tmux usage and
-git worktrees, à la [ThePrimeagen](https://www.youtube.com/watch?v=GXxvxSlzJdI).
-
+setup, ~~but would like to improve the workflow with increased tmux usage and
+git worktrees, à la [ThePrimeagen](https://www.youtube.com/watch?v=GXxvxSlzJdI).~~
+I now use worktrees full time, and it is a game changer when it comes to development.
+For improving my tmux workflow I now use a popup session which I can easily toggle. I
+use this popup sessions to run all time consuming tasks during development in the
+background, such as compiling and running tests.
I build my own keyboard, and I currently have several [ferris sweep](https://github.com/davidphilipbarr/Sweep),
but my latest build is a [Charybdis Nano](https://bastardkb.com/product/charybdis-nano-kit/) and I believe this
@@ -102,30 +108,43 @@ solutions from the past, just because you cannot bother learning something new.
#### Architecture
Good software is like physics, it should avoid too much complexity, like von
-Neumann famously stated, *"With four parameters I can fit an elephant, and with
-five I can make him wiggle his trunk"*. I adhere by the [unix
+Neumann famously stated, _"With four parameters I can fit an elephant, and with
+five I can make him wiggle his trunk"_. I adhere by the [unix
philosophy](http://www.catb.org/esr/writings/taoup/html/ch01s06.html), as well
as the [suckless philosophy](https://suckless.org/philosophy/). I truly believe
that you develop better software by following these principles.
For designing and implementing distributed systems, I really like
-the framework presented in the book *The Tao of Microservices*. Web services
+the framework presented in the book _The Tao of Microservices_. Web services
should almost be provocatively small, most communication between services
should be asynchronous. It is important to reason and respect separation of concerns.
You should at all cost avoid building a distributed monolith with entangled dependencies.
-I also like the idea of designing systems from first principles with defining the
+I also like the idea of designing systems from first principles with defining the
messages first, and not focus on the services from the start.
-However, I have started exploring the idea of "modular monolith", I believe this to be the most
-sane approach to building software yet. It keeps the communication simple between modules,
+However, I have now started exploring the idea of "modular monolith", I believe this to be the most
+sane approach to building software yet. It keeps the communication simple between modules,
e.g. inter-process instead of network calls, such as http or grpc. It has the benefit of
-having the entire source code in one place, making it easier to develop new software
-using existing interfaces. If you develop it the right way, modules can easily be
-extracted into separate services if necessary.
+having the entire source code in one place, making it easier to develop new software
+using existing interfaces. If you develop it the right way, modules can easily be
+extracted into separate services if necessary. But I see a downside to this approach,
+and that is how to deal with the complexity of testing multiple features/branches at
+the same time in dev/staging, maybe there is a good way?
#### Machine Learning
-tbc...
+I have worked on many machine learning projects, both at work and at home (hobby), ranging
+from time series classification, regression, generative models, and machine translation to
+name a few. My latest [project](https://github.com/aktersnurra/rag) is a Retrieval
+Augmented Generation (RAG) system for my personal library of books and articles. I plan
+on extending this to integrate with dmenu, so I can ask questions through the search bar,
+which will be pretty cool.
+
+I have also spent quite some time on a OCR [project](https://github.com/aktersnurra/text-recognizer)
+where I started with CNN-LSTM based systems to then move on to transformer models that
+I have implemented. This has been a crucial project for me, as it has kept me up to date
+with the SOTA in transformer architectures, and allowed me to test some of my own ideas out,
+most of which were not successful.
#### Miscellaneous
@@ -136,65 +155,69 @@ tbc...
### Experience
- Software Engineer. Nexure AB. Aug 2021 -- Present
+
- Develop and maintain microservices for payments and subscriptions.
- Take part in architectural design discussions.
- Participated in the code review process.
- Contribute to the infrastructure with updates to k8s resources and AWS
- resource management via Terraform.
+ resource management via Terraform.
- Monitor logs for bugs in different environments, e.g. staging and
- production.
+ production.
- *Keywords: Microservices, Kubernetes, Infrastructure, Helm, CI/CD, Kotlin,
- Spring, AWS, Terraform*
+ _Keywords: Microservices, Kubernetes, Infrastructure, Helm, CI/CD, Kotlin,
+ Spring, AWS, Terraform_
- Machine Learning Engineer (Cyber Security). Saab AB. Aug 2020 -- Aug 2021
+
- Created data mining pipelines for extracting, cleaning, and creating
- datasets for machine learning models, i.e. train/test sets.
+ datasets for machine learning models, i.e. train/test sets.
- Was a driving force in making the system more asynchronous using
- message passing between microservices, by deploying and maintaining a
- Kafka instance. This improve the architecture by allowing multiple
- services to subscribe to incoming sensor data and process the
- information, instead of fetching the data from databases in batches.
+ message passing between microservices, by deploying and maintaining a
+ Kafka instance. This improve the architecture by allowing multiple
+ services to subscribe to incoming sensor data and process the
+ information, instead of fetching the data from databases in batches.
- Developed a modular pipeline for training and evaluating deep learning
- models with different architectures and/or losses. Automatic extraction
- of the best model based on user defined metric, ready for serving.
+ models with different architectures and/or losses. Automatic extraction
+ of the best model based on user defined metric, ready for serving.
- Built and deployed deep learning models for multi-modal trajectory
- predictions in production.
+ predictions in production.
- Took initiative and deployed and maintained a private Python Package
- Index (PyPI) for all developers. Greatly improving the development
- workflow, e.g. forcing versioning, and reducing/eliminating cross
- dependencies between locally developed Python packages.
+ Index (PyPI) for all developers. Greatly improving the development
+ workflow, e.g. forcing versioning, and reducing/eliminating cross
+ dependencies between locally developed Python packages.
- Developed a graph algorithm for sensor fusion. Deployed it as a
- microservice listing to incoming sensor data. This enabled more complex
- pattern analysis in downstream services.
+ microservice listing to incoming sensor data. This enabled more complex
+ pattern analysis in downstream services.
- Reduced the docker image size of the Python microservices from ~2 GB
- to ~73 MB by utilizing multistage builds and alpine base images.
+ to ~73 MB by utilizing multistage builds and alpine base images.
- Built pipelines for CI/CD and packages deployment in Tekton.
- With my docker images and pipelines we where able to reduce the
- average build times from ~10-30 minutes down to seconds, mostly thanks
- to improved caching capabilities.
+ average build times from ~10-30 minutes down to seconds, mostly thanks
+ to improved caching capabilities.
- *Keywords: Deep Learning, Python, Microservices, Kubernetes,
- Infrastructure, Helm, CI/CD*
+ _Keywords: Deep Learning, Python, Microservices, Kubernetes,
+ Infrastructure, Helm, CI/CD_
- Machine Learning Engineer (Surveillance). Saab AB. Aug 2018 -- Aug 2020
+
- Built simulation software for generating realistic signal
- environments with both radar and/or communication signals. Implemented
- the most common signal encoding for communications, as well as
- basic to SOTA radar modulations. This enabled the team to develop and
- evaluate different machine learning models and ideas.
+ environments with both radar and/or communication signals. Implemented
+ the most common signal encoding for communications, as well as
+ basic to SOTA radar modulations. This enabled the team to develop and
+ evaluate different machine learning models and ideas.
- Researched machine learning models in different stages of the radar
- warning receiver, with regards to compute and data limitations.
+ warning receiver, with regards to compute and data limitations.
- Held in several presentations of machine learning papers in a company
- reading group.
+ reading group.
- Shared the knowledge of implementing and using machine learning to
- multiple business areas within Saab.
+ multiple business areas within Saab.
- *Keywords: Deep Learning, Signal Processing, Python, VHDL*
+ _Keywords: Deep Learning, Signal Processing, Python, VHDL_
### Institutions
- M.Sc., Electrical Engineering. Kungliga Tekniska Högskolan. 2013 -- 2018
+
- Specialization in Machine Learning
- Exchange Year. Imperial College London. 2016 -- 2017