60 Commits

Author SHA1 Message Date
aa87ad7538 WIP: Start implementing OAuth 2023-05-31 14:25:42 +02:00
918b075b62 WIP: Start writing a first post 2023-05-31 13:22:28 +02:00
253d22592a fix: Get rid of a small typo 2023-05-30 16:40:47 +02:00
0b5eb9da8f release: allanger - Trace 2023-05-30 16:18:10 +02:00
7b86516192 release: allanger - Under My Pillow 2023-05-30 16:07:59 +02:00
64fd4b50d9 release: allanger - Await 2023-05-30 15:56:49 +02:00
012021bd93 release: allanger - Await 2023-05-30 15:55:51 +02:00
6031309d1c Upgrade the builder version 2023-05-30 11:25:25 +02:00
6d7dc16587 Use a custom built image as a hugo builder 2023-05-30 11:11:50 +02:00
704f4b037a chore: Update the builder version 2023-05-24 11:25:31 +02:00
688d94584d fix: Set the correct release date for \*Not Alone\* 2023-05-23 11:27:20 +02:00
21801ef374 release: allanger - Not Alone 2023-05-23 11:24:44 +02:00
52c3416c99 release: allanger - Desesitized 2023-05-23 11:00:14 +02:00
1ce93a3a9f fix: Lately added release pages are correct 2023-05-22 13:17:26 +02:00
042f905bbb build: Move to a separate project 2023-05-21 17:56:46 +02:00
5036bf28fb release: allanger - Out Of Law 2023-05-21 17:48:09 +02:00
26c8f97789 build: Use argocd app apply instead of kubectl 2023-05-21 17:38:20 +02:00
38d271958b release: allanger - Wasted Time 2023-05-21 17:21:22 +02:00
0b1dadc557 release: allanger - Let me Kill 2023-05-21 17:08:05 +02:00
04e400c1ba build: Migrate to Docker runners 2023-05-21 11:52:24 +02:00
f569e96f7e fix: Set the correct name to the page 2023-05-16 20:51:33 +02:00
23b1aa6143 Release: allanger - Anymore 2023-05-16 20:48:39 +02:00
e9c8932766 Remove beats that are alaready taken 2023-05-16 16:44:19 +02:00
0f7c3becc8 allanger - Four Steps Begind is added 2023-05-16 12:54:22 +02:00
e9dad4adab Update the chart version 2023-05-16 12:24:41 +02:00
a9aeb44e05 Deploy on the main branch too 2023-05-16 12:21:20 +02:00
b2e9cb0d7d build: Get rid of ApplicationSets 2023-05-16 12:15:30 +02:00
f16c18f0e8 fix: Get rid of a small typo 2023-05-12 16:51:53 +02:00
32e7e20a3b Add info about GitCommit to the About page 2023-05-12 16:50:49 +02:00
88fe02e604 fix: Get rid of typos 2023-05-12 16:32:54 +02:00
83fe25f4a4 Update the About page 2023-05-12 16:32:11 +02:00
3916ee2a23 Remove extra text from the Home page 2023-05-12 16:31:56 +02:00
643cd7907d Remove obsolete drafts about DevOps 2023-05-12 16:20:46 +02:00
7597cb244e Remove the 'Trace by Oveleane' announce 2023-05-12 16:20:36 +02:00
e6238ab77c Make spell-checker only check the content dir 2023-05-12 16:18:07 +02:00
a02f98af92 Get submodule after switching to a branch 2023-05-12 13:42:14 +02:00
68dea24cf2 Use the PaperMod theme again 2023-05-12 13:37:18 +02:00
ca8d28d6c2 Fix the PaperMod version 2023-05-12 13:35:52 +02:00
4ca35fd637 feat: Start using a better theme 2023-05-12 13:31:02 +02:00
efcdc46c24 refactor: Renambe Dockerfile to Containerfile
I'm not user docker for building, hence it makes more sense to have a
`Containerfile`
2023-05-12 13:30:59 +02:00
792601fbb0 Add papermod as git submodule again 2023-05-12 13:24:23 +02:00
c081879d09 Remove the papermod theme from repo 2023-05-12 13:23:46 +02:00
1748e2ad5f Add hugo_build.lock to gitignore 2023-05-12 13:23:00 +02:00
9abe51223b Add the 'Support' button 2023-05-12 13:20:42 +02:00
86b0b54f56 feat: Add an admin email to Remark42 2023-05-10 13:38:22 +02:00
6e84d4b6d8 Update spellchecker config 2023-05-08 14:51:30 +02:00
aa788f30bc Try doing a wee cleanup 2023-05-08 14:48:02 +02:00
ae45b107eb Get rid of a typo on the main page 2023-05-08 14:38:41 +02:00
67ff2bbdfd Add a spellchecker tool to CI and fix all existing typos. 2023-05-08 14:11:59 +02:00
77447a18da Add some info to the home page 2023-05-08 14:07:57 +02:00
25461b9bd0 fix CV and open links in new tabs 2023-05-04 17:00:30 +02:00
4d72a93220 Remove @allanger CV from the blog code 2023-05-02 21:08:03 +02:00
136985328a build: Run deploy 2023-04-28 15:09:21 +02:00
996a8ed0df fix: Set the working email 2023-04-28 13:19:55 +02:00
32b08eac39 Checkout to a branch, not to a commit 2023-04-26 07:17:19 +02:00
beefd5540f Debug on production 2023-04-26 07:15:34 +02:00
7545d28790 Try using chomp instead of chop in the uploader 2023-04-26 07:07:54 +02:00
add04f888b build: Use the builder image everywhere 2023-04-26 06:47:52 +02:00
71b9ab544b release: Oveleane - Trace 2023-04-26 06:43:01 +02:00
828559a6a1 fix: Upload script is working again 2023-04-25 11:18:03 +02:00
138 changed files with 892 additions and 627 deletions

View File

@ -4,8 +4,8 @@
node_modules/**/*
node_modules
static/**/*
static
src/static/**/*
src/static
scripts/**/*
scripts

View File

@ -3,7 +3,7 @@
# -- Update the helm chart
# ----------------------------------------------
kind: pipeline
type: kubernetes
type: docker
name: Publish the helm chart
trigger:
@ -26,7 +26,7 @@ steps:
# -- Build the site and push it to the registry
# ----------------------------------------------
kind: pipeline
type: kubernetes
type: docker
name: Build badhouseplants.net
trigger:
@ -41,20 +41,21 @@ steps:
environment:
GIT_LFS_SKIP_SMUDGE: 1
commands:
- git clone $DRONE_REMOTE_URL --recurse-submodules .
- git checkout $DRONE_COMMIT
- git clone $DRONE_REMOTE_URL .
- git checkout $DRONE_BRANCH
- git submodule update --init --recursive
- name: Test a build
image: git.badhouseplants.net/badhouseplants/hugo-builder
depends_on:
depends_on:
- clone
commands:
- hugo
- hugo -s ./src
- name: Build and push the docker image
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
privileged: true
depends_on:
depends_on:
- Test a build
environment:
GITEA_TOKEN:
@ -63,8 +64,8 @@ steps:
- ./scripts/build-container.pl
- name: Sync pictures from lfs to Minio
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a
depends_on:
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
depends_on:
- Test a build
environment:
RCLONE_CONFIG_CONTENT:
@ -74,89 +75,27 @@ steps:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- ./scripts/upload-media.pl
- name: Deploy a preview ApplicationSet
image: alpine/k8s:1.24.10
when:
branch:
exclude:
- main
- name: Deploy the application
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
depends_on:
- Build and push the docker image
- Sync pictures from lfs to Minio
environment:
KUBECONFIG_CONTENT:
from_secret: KUBECONFIG_CONTENT
commands:
- mkdir $HOME/.kube
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
- apk update --no-cache && apk add yq gettext openssl
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'`
- export ARGO_APP_BRANCH=$DRONE_BRANCH
- export ARGO_APP_HOSTNAME="${DRONE_BRANCH}-dev.badhouseplants.net"
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
- export ARGO_REMARK42_SECRET=$(openssl rand -hex 12)
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
- yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
- yq -i "del(.metadata.generation)" /tmp/appset.yaml
- yq -i "del(.metadata.uid)" /tmp/appset.yaml
- yq -i "del(.status)" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
- envsubst < ./kube/template.yaml > /tmp/elements.yaml
- yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
- kubectl apply -f /tmp/appset.yaml
- name: Deploy a main ApplicationSet
image: alpine/k8s:1.24.10
when:
branch:
- main
depends_on:
- Build and push the docker image
- Sync pictures from lfs to Minio
environment:
KUBECONFIG_CONTENT:
from_secret: KUBECONFIG_CONTENT
ARGO_GITHUB_OAUTH_KEY:
from_secret: GITHUB_OAUTH_KEY
ARGO_GOOGLE_OAUTH_KEY:
from_secret: GOOGLE_OAUTH_KEY
commands:
- mkdir $HOME/.kube
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
- apk update --no-cache && apk add yq gettext
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'`
- export ARGO_APP_BRANCH=$DRONE_BRANCH
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
- yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
- yq -i "del(.metadata.generation)" /tmp/appset.yaml
- yq -i "del(.metadata.uid)" /tmp/appset.yaml
- yq -i "del(.status)" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/appset.yaml
- yq -i '. *= load("./kube/applicationset.yaml")' /tmp/appset.yaml
- envsubst < ./kube/main.yaml > /tmp/elements.yaml
- yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
- kubectl apply -f /tmp/appset.yaml
- name: Sync application
image: argoproj/argocd
depends_on:
- Deploy a main ApplicationSet
- Deploy a preview ApplicationSet
environment:
ARGOCD_SERVER:
from_secret: ARGOCD_SERVER
ARGOCD_AUTH_TOKEN:
from_secret: ARGOCD_AUTH_TOKEN
ARGO_GITHUB_OAUTH_KEY:
from_secret: GITHUB_OAUTH_KEY
ARGO_GOOGLE_OAUTH_KEY:
from_secret: GOOGLE_OAUTH_KEY
commands:
- argocd app sync -l app=badhouseplants -l branch=$DRONE_BRANCH
- argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH
- ./scripts/deploy-app.pl
- name: Cleanup everything
image: rclone/rclone:latest
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
depends_on:
- Sync application
- Deploy the application
environment:
RCLONE_CONFIG_CONTENT:
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
@ -169,44 +108,29 @@ steps:
from_secret: ARGOCD_AUTH_TOKEN
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- apk update
- apk add curl jq perl git yq
- curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
- install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
- rm argocd-linux-amd64
- ./scripts/cleanup.pl
---
# ----------------------------------------------
# -- Upload a newer version of my CV
# ----------------------------------------------
kind: pipeline
type: kubernetes
name: CV Builder
type: docker
name: Spell-Checker
trigger:
branch:
- main
event:
- push
steps:
- name: Build the CV
image: ghcr.io/puppeteer/puppeteer
commands:
- cp -R ./content/cv/* $HOME
- cd $HOME
- npm install md-to-pdf
- npx md-to-pdf index.md
- mkdir $DRONE_WORKSPACE/cv
- mv index.pdf $DRONE_WORKSPACE/cv/n.rodionov.pdf
- push
clone:
disable: true
- name: Upload the CV
image: rclone/rclone:latest
steps:
- name: clone
image: alpine/git
environment:
RCLONE_CONFIG_CONTENT:
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
RCLONE_CONFIG: /tmp/rclone.conf
GIT_LFS_SKIP_SMUDGE: 1
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- rclone copy -P $DRONE_WORKSPACE/cv badhouseplants-minio:/public-download
- git clone $DRONE_REMOTE_URL --recurse-submodules .
- git checkout $DRONE_BRANCH
- name: Spell-Checker
image: node
commands:
- npm i markdown-spellcheck -g
- mdspell "src/content/**/*.md" -n -r

4
.gitattributes vendored
View File

@ -1,2 +1,2 @@
static/** filter=lfs diff=lfs merge=lfs -text
static/**/* filter=lfs diff=lfs merge=lfs -text
src/static/** filter=lfs diff=lfs merge=lfs -text
src/static/**/* filter=lfs diff=lfs merge=lfs -text

9
.gitignore vendored
View File

@ -1,5 +1,4 @@
node_modules
#static
content/cv/index.pdf
public
resources
src/node_modules
src/public
src/resources
.hugo_build.lock

6
.gitmodules vendored
View File

@ -1,3 +1,5 @@
[submodule "themes/papermod"]
path = themes/papermod
[submodule "src/themes/papermod"]
path = src/themes/papermod
url = https://github.com/adityatelange/hugo-PaperMod.git
branch = v7.0

144
.spelling Normal file
View File

@ -0,0 +1,144 @@
# markdown-spellcheck spelling configuration file
# Format - lines beginning # are comments
# global dictionary is at the start, file overrides afterwards
# one word per line, to define a file override use ' - filename'
# where filename is relative to this configuration file
WIP
envs
anymore
hostname
hostnames
Dockerfile
helmfile
k8s
env
dir
dev'n'stages
oi
minio
ArgoCD
setups
SRE
autoscaler
gitea
vendoring
cli
vpa
ok
cmp
config
GitOps
argo
argocding
cluster-1
cluster-2
cluster-3
kubernetes
argocd
helmfiles
plugin
helmfile.yaml
cleanup
serie
backend
js
frontend
ShowToc
cover.png
allanger
DIY
DevOps
funkwhale
PSY
bandcamp
soundcloud
spotify
deezer
prog-rock
oveleane
IDM
gitlab
bitwarden
elasticsearch
grafana
lifecycle
auditable
the-first-production-grafaba
grafana
applicationsets
helm-releases-v2
yaml
CR
minecraft
github
ddosed
VST
Xfer
plugins
yabridgectl
yabridge
DAW
polyverse
camelcrusher
standalone
url
glitchmachines
MacBook
configs
behaviour
FreqEcho
DSP
Supermassive
Ableton
Softube
center
iZotope
V2
auth
README.md
TAL-Chorus-LX
badhouseplants
Deelay
Gatelab
Filterstep
Panflow
PaulXStretch
Audiomodern
Kushview
JUCE
Melda
MDrummer
GBs
laggy
MDrumReplacer
MPowerSynth
MGuitarArchitect
u-he
TyrellN6
Tyrell
install.sh
MGuitarArchitect
Amazona.de.
Bitwig
ProjectSAM
Pendulate
Protoverb
Eurorack
S3
XT
Ruina
VCV
LFO
beatmaker
- src/themes/papermod/README.md
PaperMod
hugo-paper
og
ExampleSite
exampleSite
pipelining
Fuse.js
webpack
nodejs
Pagespeed
Highlight.js

4
Containerfile Normal file
View File

@ -0,0 +1,4 @@
FROM git.badhouseplants.net/badhouseplants/hugo-container:451ffcefe9803644a65172b04e34392564ce8743
WORKDIR /src
COPY ./src /src
ENTRYPOINT ["hugo"]

View File

@ -1,4 +0,0 @@
FROM git.badhouseplants.net/badhouseplants/hugo-builder
WORKDIR /src
COPY . /src
ENTRYPOINT ["hugo"]

View File

@ -1,4 +1,8 @@
# Badhouseplants NET
## About
- To be done
## Static content
Storing static content in the repo is painful, because there are massive. That's why for storing them I'm using a S3 bucket that is publicly available for downstream operations

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: badhouseplants-net
description: A Helm chart for Kubernetes
type: application
version: 0.6.0
version: 0.7.1
appVersion: "4.20.0"
dependencies:
- name: remark42

View File

@ -5,7 +5,7 @@ namespace:
labels:
istio-injection: enabled
enabled: true
name: badhouseplants-application
name: badhouseplants-main
nginx:
container:

View File

@ -1,27 +0,0 @@
---
title: About
date: 2023-01-24T09:26:52+01:00
draft: false
---
It was supposed to be just yet another web page with musical releases reviews, but after trying to write something like that, I've found out that I'm not good at it. So I've decided to start a blog where I can write anything that comes to my mind.
<!-- ![Bad Houseplants](/about/logo.png) -->
> The last build is [![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net)
### What is Bad Houseplants?
> **allanger**
>
> *Actually, I'm not sure yet. I wanted it to be something about music, but I found out that musical industry is not very welcoming, and I don't know what exactly I > can do there. Creating music is somehow an intimate process to me, so I can't share a lot about it. The whole distributing thing is a black-box, and I wouldn't like to be a part of it, until anything is changed. I wanted to do musical reviews, but there are tons of guys who already do it a way better than I can. So I've given up on music here. I still hope that one day I'll open a recording studio under this name, but I'm not sure when it's even going to be possible. The second thing that I can talk about is IT. I think it can be interesting, but I don't want to kind of stigmatized as an IT blogger. And then I've decided that I would like to write something about indie culture, about DIY philosophy and all this punk related stuff. So let's say that is a blog about indie*
### Wanna join?
If you want to publish anything here, I don't mind. But for doing that you need to have at least basic `git` knowledge because this blog is written as code. You can check the [source code](https://git.badhouseplants.net/badhouseplants/badhouseplants-net) to understand if you're ready or not. I'm hosting my own `Gitea` instance, so you will have to request an account ([just email me](mailto:allanger@zohomail.com) or find me on [telegram](https://t.me/allanger)), when you got one, you're ready to start writing. If you have any questions about how to start, I'm always open for a conversation.
Thanks,
Oi!

View File

@ -1,108 +0,0 @@
---
title: "Curriculum Vitae (CV)"
date: 2023-02-11T18:29:00+01:00
draft: false
ShowToc: true
---
# Nikolai Rodionov
```
> Location: Düsseldorf, Germany
> Email: allanger@zohomail.com (preffered)
> Phone: 015223284008
> Github: https://github.com/allanger
```
---
## About me
<p align="center">
<img src="./myself.jpeg" alt="drawing" width="30%"/>
</p>
I'm a DevOps engineer (or SRE if you wish) with 5++ years of hands-on experience with a decent amount of tools that are most probably used or going to be used in your company. One of the most important tools that I love working with and want to continue working with, is Kubernetes. At least, while I don't see any better alternative to it. I think that containers themselves are one of coolest inventions in development, and I'm trying to use them as long as it's possible. Also, I believe that every routine must be automated, because routing is a boring job that lets people lose focus and make mistakes.
I think that there are several things that a good SRE or DevOps engineer must be able to do:
- To build reliable and stable infrastructure
- Keep this infrastructure up-to-date
- Keep all the source and instructions of this infrastructure clean and simple
- Avoid a human factor as long as possible
- And when it's not possible to avoid it, not to be afraid to take responsibility
Also, I think it's important that before implementing anything, an engineer has understood all the requirements and checked tools that can fulfil them. I often see, how people try to use a tool for its name but not for its functionality, and hence they have to do a lot of additional work and deal with compromises. And if nothing really can fulfil those requirements, you need not be afraid of writing something new *and open-source it*.
<div class="page-break"></div>
## Experience
**Grandcentrix**: SRE
> 02.2023 - until now
```
| Microsoft Azure
| Containers - Kubernetes - Helm - Kustomize
| PostgreSQL
| Bash - Python
| Prometheus - Grafana - Loki
| ArgoCD - Github Actions
| Sops
| Terraform
```
**Klöckner-i**: DevOps Engineer
> 01.2022 - 01.2023
```
| GCloud - Microsoft Azure
| Linux - Containers - Kubernetes - Helm - Helmfile
| Percona Mysql - Postgresql
| Bash
| Prometheus - Grafana - Elasticsearch - Kibana
| ArgoCD - Gitlab CI - Github Actions
| Sops
| Ansible
```
---
**Itigris**: DevOps Engineer
> 07.2019 - 12.2021
```
| AWS - Yandex Cloud
| Linux - Containers - Kubernetes - Helm - Helmfile - Kustomize
| Bash
| Gitlab CI - Drone - ArgoCD
| Postgresql - Redis
| Java - JS - Go
| Ansible - Terraform
| Prometheus - Grafana - Loki - Elasticsearch - Kibana
```
---
**Etersoft**: DevOps Engineer
> 03.2017 - 06.2019
```
| Bare metal - Proxmox - Virtual Box
| Linux - Containers - Networks
| Bash - Perl
| Mysql - Postgresql
| Minio - Ceph
| Gitlab CI
| Ansible
```
## A little bit more about me
- I love to work with `Kubernetes`, but not with `yaml`.
- I'm a huge fan of [Helmfile](https://github.com/helmfile/helmfile).
- I have written several small cli tools in Rust, that you might find in my [GitHub profile pins](https://github.com/allanger) (they are not perfect, but I'm working on it).
- I'm contributing to [db-operator](https://github.com/kloeckner-i/db-operator).
- I'm trying to automate everything until I'm losing control over something that is automated.
- I love Perl, although I don't even remember how to write code with it, but I would be somehow thrilled to have any ability to work with it in production
- I also think that everything is better in Rust, or at least in Go *(if Bash is not enough)*
I have a blog (written-as-code) that is deployed to K8s (https://badhouseplants.net/), with the source code stored in a self-hosted Gitea, that is also deployed to K8s alongside the CI/CD system where this blog is being built and published. This CV is also being built as a part of the CI process, and then uploaded to `minio` storage that is also ~~surprisingly~~ running in this cluster. So you can download the latest version of CV here: <https://s3.badhouseplants.net/public-download/n.rodionov.pdf>
> But I can't guarantee 100% availability because it's a one-node k8s, and sometimes I need to do a maintenance work

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

View File

@ -1,95 +0,0 @@
---
title: "Music"
date: 2023-01-31T13:52:43+01:00
draft: false
ShowToc: true
---
Everything that's created by me, can be found on my [funkwhale instance](https://funkwhale.badhouseplants.net). But I'm only uploading `lossy` there. I was trying to upload lossless, but then it either doesn't really work with my Android App, or it's hard to manage. And it needs a way more disk that way. So if you want to listnen to lossless, go to my [Bandcamp](https://allanger.bandcamp.com/). *A lot of tracks are still not there, but they will be there soon*. I also have a [SoundCloud account](https://soundcloud.com/allanger) and I try to publish everything there.
---
### allanger
[Spotify](https://open.spotify.com/artist/1VPAs75xrhaXhCIIHsgF02) - [Apple Music](https://music.apple.com/us/artist/allanger/1617855325) - [Deezer](https://www.deezer.com/us/artist/117780712) - [SoundCloud](https://soundcloud.com/allanger) - [Bandcamp](https://allanger.bandcamp.com/) - [Funkwhale](https://funkwhale.badhouseplants.net/library/artists/3/)
#### Out of Law
>![Cover](/music/allanger-Out_of_Law.png)
>Release Date: 2022-06-08
>
>Genre: Alternative
>
>Sub Genre: Punk
[Spotify](spotify:album:4RACKNtJqPXZOB6UsmwxKp) - [Apple Music](https://music.apple.com/us/album/1625562031) - [Deezer](https://www.deezer.com/us/album/321014447) - [SoundCloud](https://soundcloud.com/allanger/out-of-law) - [Bandcamp](https://allanger.bandcamp.com/album/out-of-law) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/5/)
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=5"></iframe>
{{< /rawhtml >}}
#### Wasted Time
>![Cover](/music/allanger-Waster_Time.png)
>Release Date: 2022-05-17
>
>Genre: Punk/Rock
>
>Sub Genre: Prog-Rock/Art Rock
[Spotify](spotify:album:2zOW72GHTTKIZAbwjmxili) - [Apple Music](https://music.apple.com/us/album/1617855666) - [Deezer](https://www.deezer.com/us/album/308544627) - [SoundCloud](https://soundcloud.com/allanger/wasted-time?si=59896836701c48b6a07f7af96043faaf&utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing) - [Bandcamp](https://allanger.bandcamp.com/album/wasted-time) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/4/)
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=4"></iframe>
{{< /rawhtml >}}
#### Let Me Kill
> In this song, I'm using samples from a YouTube video, and so I'm not sure that I can distribute on all platforms. That's why it exists only on SoundCloud, Funkwhale, and Bandcamp
>![Cover](/music/allanger-Let_Me_Kill.png)
>Release Date: 2021-10-15
>
>Genre: Trap
[SoundCloud](https://soundcloud.com/allanger/let-me-kill) - [Bandcamp](https://allanger.bandcamp.com/track/let-me-kill) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/7/)
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=7"></iframe>
{{< /rawhtml >}}
#### Anymore
> In this song, I'm using samples from a YouTube video, and so I'm not sure that I can distribute on all platforms. That's why it exists only on SoundCloud and Funkwhale
>![Cover](/music/allanger-Anymore.jpg)
>Release Date: 2018-12-26
>
>Genre: Indie
>
>Sub Genre: Lo-Fi Indie
[SoundCloud](https://soundcloud.com/allanger/anymore) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/11/)
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=11"></iframe>
{{< /rawhtml >}}
### Oveleane
> It's another project made by me, I just thought that that electronic stuff won't fit well in the allanger's profile, and so decided to separate them. But it's still allanger, you know...
[Spotify](https://open.spotify.com/artist/2PKE1XvwP82LCacM5q6rCx?si=hJyJWcEgR4mZLkjbCso45A) - [Apple Music](https://music.apple.com/us/artist/oveleane/1654951021) - [Deezer](https://www.deezer.com/us/artist/190392997)
#### Four Steps Behind
>![Cover](/music/Oveleane%20-%20Four%20Steps%20Behind.jpg)
>Release Date: 2022-12-05
>
>Genre: Electronic
>
>Sub Genre: IDM/Experimental
[Spotify](https://open.spotify.com/album/1RjB1xLoD2JXmWuBjGegCN?si=fIsGrOfoQRaeKu9f-Oh0dw) - [Apple Music](https://music.apple.com/us/album/1654953305) - [Deezer](https://www.deezer.com/us/album/377293977) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/1/)
{{< rawhtml >}}
<iframe width="100%" height="330" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=1"></iframe>
{{< /rawhtml >}}

View File

@ -1,53 +0,0 @@
---
title: "Argocd Dynamic Environment per Branch Part 2"
date: 2023-03-29T17:31:20+02:00
draft: true
ShowToc: true
cover:
image: "cover.png"
caption: "Argocd Dynamic Environment per Branch Part 2"
relative: false
responsiveImages: false
---
So it's been a while since the last post. And I'd like to continue the topic, because I've updated some things. But at the same time I'd like to talk about the setup that I've got and why I think it is good.
First, I'd like to show how I fixed the Minio issue from the previous post.
>Im using Minio as a storage for pictures, and currently all pictures (and other files) are stored in one folder regardless of the environment.
I've started using `git lfs` for media data. But I still want to have small docker images so I've decided to add some logi around pushing media files to `Minio`. So I've added a Drone job:
```YAML
- name: Sync pictures from lfs to Minio
image: rclone/rclone:latest
when:
branch:
exclude:
- main
environment:
RCLONE_CONFIG_CONTENT:
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
RCLONE_CONFIG: /tmp/rclone.conf
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- apk update
- apk add git make
- make upload_static
- name: Sync pictures to the main Minio bucket
image: rclone/rclone:latest
when:
branch:
- main
environment:
RCLONE_CONFIG_CONTENT:
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
RCLONE_CONFIG: /tmp/rclone.conf
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- apk update
- apk add git make
- make sync_static_with_main
```

View File

@ -1,16 +0,0 @@
---
title: "Create wubs with Vital"
date: 2023-04-23T17:49:35+02:00
draft: true
ShowToc: true
cover:
image: "cover.png"
caption: "Create wubs in Vital"
relative: false
responsiveImages: false
tags: ['music', 'sound-design', 'vst']
---
First, if you don't know what Vital is, you should definitely check it out. It's an awesome synth plugin that lets you create almost anything that comes to your mind without spending you whole life trying to understand what each button does. I'd say it's a perfect example of good UX/UI design. And in case you don't have it yet, you just [go here and get it](https://vital.audio/).
If you already have it, we can go further. The only thing that you really need to use to create a cool **wub** synth, it's an `LFO`. What's that, you ask? It's an

View File

@ -1,26 +0,0 @@
---
title: "Design a Scalable System"
date: 2023-03-06T21:18:23+01:00
draft: true
ShowToc: true
cover:
image: "cover.png"
caption: "Design a Scalable System"
relative: false
responsiveImages: false
---
Well, after I've posted my argo serie, I've found out that I couldn't really make myself understood. So now I want to talk more not about the way of implementation, but rather about the consequinces of different implementations. And maybe I will e able to finally make a point about why I don't like Terraform and why I think that ArgoCD is mostly mis-used by almost any SRE team I know.
But first I'll try to describe how I see myself as a part of a team, the team as a part of a bigger team, and all the teams across different companies as links in the bigger chain.
This is how I used to see development teams before:
![Chain](/posts/design-a-scalable-system/chain-1.png)
The whole team is using something as a service, for example `AWS`, the whole team is working together and producing something that is passed to a customer. But apparently this approach is only applicable to small teams, and I think it's working just fine. But there is a problem. Teams tend to grow without an understanding that they are growing, hence they keep acting like they're small but in the same time they don't change the workflow, and brick-by-brick they are building something that eventually is something unscalable at first and later unmaintanble.
Example of an evolution like this:
Let's take a regular Java(backend) + JS(frontend) web application

View File

@ -1,10 +0,0 @@
---
title: "Sounds"
date: 2023-01-31T13:52:43+01:00
draft: false
ShowToc: false
---
Here you can download different presets and sounds

View File

@ -2,51 +2,21 @@ apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels:
application: $APPLICATON
branch: $GIT_BRANCH
commit_sha: $GIT_COMMIT_SHA
name: $APPLICATON-$GIT_BRANCH
application: badhouseplants
branch: $ARGO_APP_BRANCH
commit_sha: $ARGO_APP_IMAGE_TAG
name: badhouseplants-$ARGO_APP_BRANCH
namespace: argo-system
spec:
destination:
namespace: $APPLICATON-$GIT_BRANCH
namespace: badhouseplants-$ARGO_APP_BRANCH
server: https://kubernetes.default.svc
project: default
project: badhouseplants
source:
chart: badhouseplants-net
targetRevision: $HELM_CHART_VERSION
targetRevision: $ARGO_APP_CHART_VERSION
helm:
valueFiles:
- values.yaml
values: |
namespace:
name: badhouseplants-create-wubs-in-vital
labels:
istio-injection: disabled
istio:
hosts:
- create-wubs-in-vital-dev.badhouseplants.net
annotations:
link.argocd.argoproj.io/env: https://create-wubs-in-vital-dev.badhouseplants.net/
link.argocd.argoproj.io/remark42: https://remark42-create-wubs-in-vital-dev.badhouseplants.net/web
link.argocd.argoproj.io/build: DRONE_BUILD_LINK
hugo:
image:
tag: ee4efc6107541657f405a3dd9b7ee238d0e69e7b
baseURL: https://create-wubs-in-vital-dev.badhouseplants.net/
buildDrafts: true
env:
HUGO_PARAMS_GITBRANCH: create-wubs-in-vital
HUGO_PARAMS_REMARK42URL: https://remark42-create-wubs-in-vital-dev.badhouseplants.net
remark42:
istio:
hosts:
- remark42-create-wubs-in-vital-dev.badhouseplants.net
settings:
url: https://remark42-create-wubs-in-vital-dev.badhouseplants.net/
auth:
anonymous: true
secretKey: b8a41781b2c1ba2ecf49e4e7
rclone:
command: "rclone copy -P badhouseplants-public:/badhouseplants-net/ee4efc6107541657f405a3dd9b7ee238d0e69e7b /static"
values: __DUMMY__
repoURL: https://git.badhouseplants.net/api/packages/badhouseplants/helm

34
kube/project.yaml Normal file
View File

@ -0,0 +1,34 @@
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: badhouseplants
namespace: argo-system
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
description: BadHouseplants Blog
sourceRepos:
- '*'
destinations:
- namespace: badhouseplants-*
server: https://kubernetes.default.svc
name: in-cluster
# Deny all cluster-scoped resources from being created, except for Namespace
clusterResourceWhitelist:
- group: ''
kind: Namespace
# Allow all namespaced-scoped resources to be created, except for ResourceQuota, LimitRange, NetworkPolicy
namespaceResourceBlacklist:
- group: ''
kind: ResourceQuota
- group: ''
kind: LimitRange
- group: ''
kind: NetworkPolicy
# Enables namespace orphaned resource monitoring.
orphanedResources:
warn: false

View File

@ -1,24 +1,28 @@
- value: |
hugo:
image:
tag: $ARGO_APP_IMAGE_TAG
istio:
annotations:
link.argocd.argoproj.io/env: https://badhouseplants.net/
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web
remark42:
settings:
secret: $ARGO_REMARK_SECRET
oauth:
github:
enabled: true
key: 1fb3d33a62b074bc0ea0
secret: $ARGO_GITHUB_OAUTH_KEY
google:
enabled: true
key: 966815964055-m9t7leuj1arqimqu2pvbs1k10cg54gcg.apps.googleusercontent.com
secret: $ARGO_GOOGLE_OAUTH_KEY
storage:
requestedSize: 300Mi
---
values: |
hugo:
image:
tag: $ARGO_APP_IMAGE_TAG
env:
HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG
istio:
annotations:
link.argocd.argoproj.io/env: https://badhouseplants.net/
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web
remark42:
settings:
secret: $ARGO_REMARK_SECRET
admin:
sharedEmail: allanger@zohomail.com
oauth:
github:
enabled: true
key: 1fb3d33a62b074bc0ea0
secret: $ARGO_GITHUB_OAUTH_KEY
google:
enabled: true
key: 966815964055-m9t7leuj1arqimqu2pvbs1k10cg54gcg.apps.googleusercontent.com
secret: $ARGO_GOOGLE_OAUTH_KEY
storage:
requestedSize: 300Mi

View File

@ -1,32 +1,33 @@
---
- value: |
namespace:
name: badhouseplants-$ARGO_APP_BRANCH
labels:
istio-injection: disabled
values: |
namespace:
name: badhouseplants-$ARGO_APP_BRANCH
labels:
istio-injection: disabled
istio:
hosts:
- $ARGO_APP_HOSTNAME
annotations:
link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/
link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
hugo:
image:
tag: $ARGO_APP_IMAGE_TAG
baseURL: https://$ARGO_APP_HOSTNAME/
buildDrafts: true
env:
HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH
HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME
HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG
remark42:
istio:
hosts:
- $ARGO_APP_HOSTNAME
annotations:
link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/
link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
hugo:
image:
tag: $ARGO_APP_IMAGE_TAG
baseURL: https://$ARGO_APP_HOSTNAME/
buildDrafts: true
env:
HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH
HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME
remark42:
istio:
hosts:
- remark42-$ARGO_APP_HOSTNAME
settings:
url: https://remark42-$ARGO_APP_HOSTNAME/
auth:
anonymous: true
secretKey: $ARGO_REMARK42_SECRET
rclone:
command: "rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static"
- remark42-$ARGO_APP_HOSTNAME
settings:
url: https://remark42-$ARGO_APP_HOSTNAME/
auth:
anonymous: true
secretKey: $ARGO_REMARK_SECRET
rclone:
command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static'

View File

@ -17,16 +17,16 @@ my $image_name = $ENV{'DRONE_REPO'} || "badhouseplants/badhouseplants-net";
my $tag = "$container_registry/$image_name:$git_commit_sha";
my $username = $ENV{'DRONE_USERNAME'} || "allanger";
my $password = $ENV{'GITEA_TOKEN'} || "YOU NOT AUTHORIZED, PAL";
print `buildah login --username $username --password $password $container_registry` or die;
print `buildah build -t $tag .` or die;
print `buildah push $tag` or die;
print `buildah login --username $username --password $password $container_registry` or die $!;
print `buildah build -t $tag .` or die $!;
print `buildah push $tag` or die $!;
# -------------------------------------------------
# -- Push the lates if the branch is main
# -- Push the latest if the branch is main
# -------------------------------------------------
if ( $git_branch eq $main_branch) {
my $latest_tag = "$container_registry/$image_name:latest";
print `buildah tag $tag $latest_tag` or die;
print `buildah push $latest_tag` or die;
print `buildah tag $tag $latest_tag` or die $!;
print `buildah push $latest_tag` or die $!;
}
print "Thanks!\n";

View File

@ -2,26 +2,69 @@
use strict;
use warnings;
my $chart_version = `cat chart/Chart.yaml | yq '.version'` or die;
my $chart_version = `cat chart/Chart.yaml | yq '.version'` or die $1;
chomp($chart_version);
my $git_branch = `git rev-parse --abbrev-ref HEAD`;
chomp($git_branch);
my $git_commit_sha = `git rev-parse HEAD`;
chomp($git_commit_sha);
my $main_branch = "main";
print
print $chart_version;
# - kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
# - yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
# - yq -i "del(.metadata.generation)" /tmp/appset.yaml
# - yq -i "del(.metadata.uid)" /tmp/appset.yaml
# - yq -i "del(.status)" /tmp/appset.yaml
# - yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
# - yq -i "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/appset.yaml
# - yq -i '. *= load("./kube/applicationset.yaml")' /tmp/appset.yaml
# - envsubst < ./kube/main.yaml > /tmp/elements.yaml
# - yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
# - kubectl apply -f /tmp/appset.yaml
#
my $main_branch = "main";
my $values = "";
my $remark_secret = `openssl rand -hex 12`;
chomp($remark_secret);
$ENV{'ARGO_APP_CHART_VERSION'} = $chart_version;
$ENV{'ARGO_APP_BRANCH'} = $git_branch;
$ENV{'ARGO_APP_HOSTNAME'} = "$git_branch-dev.badhouseplants.net";
$ENV{'ARGO_APP_IMAGE_TAG'} = $git_commit_sha;
$ENV{'ARGO_REMARK_SECRET'} = $remark_secret;
# ----------------------------------
# -- Fill the Application manifest
# -- with correct values
# ----------------------------------
if ($git_branch eq $main_branch) {
print "Using the main values file\n";
print `envsubst < ./kube/values-main.yaml > /tmp/values.yaml` or die $!;
} else {
print "Using the preview values file\n";
print `envsubst < ./kube/values-preview.yaml > /tmp/values.yaml` or die $!;
}
print `yq -i '.values' /tmp/values.yaml` or die $!;
print `envsubst < ./kube/application.yaml > /tmp/application.yaml` or die $!;
print `yq -i '.spec.source.helm.values = load_str("/tmp/values.yaml")' /tmp/application.yaml` or die $!;
if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){
print `argocd app create -f /tmp/application.yaml --upsert` or die $!;
print `argocd app sync -l application=badhouseplants -l branch=$git_branch` or die $!;
print `argocd app wait -l application=badhouseplants -l branch=$git_branch` or die $!;
}
# ----------------------------------
# -- Remove all `Applications` for
# -- branches that do not exists
# ----------------------------------
my @all_applications = `argocd app list -l application=badhouseplants -o yaml | yq '.[].metadata.name'` or die $!;
chomp(@all_applications);
foreach my $app (@all_applications) {
$app =~ s/badhouseplants-//;
}
my @all_branches = `git branch --format='%(refname:short)' -r` or die $!;
chomp(@all_branches);
foreach my $branch (@all_branches) {
$branch =~ s/origin\///;
}
foreach my $app (@all_applications) {
if ( !grep( /^$app$/, @all_branches ) ) {
if ($app ne "application") {
print "$app should be removed\n";
if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){
print `argocd app delete --yes badhouseplants-$app` or die $!;
}
}
}
}

View File

@ -19,9 +19,9 @@ print `git -C /tmp/$git_commit_sha lfs pull` or die;
print "Creating a new hashed dir in the common bucket\n";
print `rclone copy -P /tmp/$git_commit_sha/static "$common_bucket/$git_commit_sha"` or die;
print `rclone copy /tmp/$git_commit_sha/src/static "$common_bucket/$git_commit_sha"` or die;
if ( $git_branch eq $main_branch) {
if ($git_branch eq $main_branch) {
print "Syncing to the production bucket\n";
print `rclone sync -P "$common_bucket/$git_commit_sha" "$main_bucket/"` or die;
print `rclone sync "$common_bucket/$git_commit_sha" "$main_bucket/"` or die;
}

0
src/.hugo_build.lock Normal file
View File

View File

@ -15,14 +15,15 @@ menu:
weight: 12
- name: About
url: /about
weight: 14
weight: 13
- name: Search
url: /search
weight: 15
weight: 14
taxonomies:
tag: tags
params:
GitBranch: main
GitCommit: unknown
Remark42ID: remark
Remark42URL: https://remark42.badhouseplants.net
ShowBreadCrumbs: true
@ -33,15 +34,17 @@ params:
profileMode:
enabled: true
title: "Bad Houseplants"
subtitle: "... by allanger"
subtitle: ... by allanger.
imageUrl: "main-logo.png"
imageWidth: 150
imageHeight: 150
buttons:
- name: Source
url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net"
- name: My Music
url: "https://funkwhale.badhouseplants.net/library/artists"
- name: Support
url: "https://liberapay.com/allanger/donate"
- name: Source
url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net"
socialIcons:
- name: "telegram"
url: "https://t.me/allanger"
@ -54,7 +57,7 @@ params:
- name: instagram
url: "https://instagram.com/_allanger"
- name: email
url: 'mailto:allanger@badhouseplants.net'
url: 'mailto:allanger@zohomail.com'
ShowShareButtons: true
ShareButtons: ["telegram", "twitter", "reddit", "linkedin"]
env: production

View File

@ -0,0 +1,17 @@
---
title: About
date: 2023-01-24T09:26:52+01:00
draft: false
---
Oi!
I'm allanger and currently I'm working as full time SRE, but recently I've found out that I'd like to spend more time doing things related to music and sound. So I'm currently looking for project to add to my portfolio. So if you want somebody do a decent (I hope) mix for you without asking for any money, just let shoot me a message.
I'm not a pro mixing engineer of course, but it's what I'm aiming for.
Also, I'm a beatmaker, you can find my bets on this site, just go to the [Beats section]({{< ref "beats" >}}). I'm not leasing them, I want one beat to be used one time by one artist. And again, I'm not a well-known beatmaker, so you can just let me know if you like anything, and we'll figure it out.
---
### Information about the build
Built from the commit [{{< param GitCommit >}}](https://git.badhouseplants.net/badhouseplants/badhouseplants-net/commit/{{< param GitCommit >}})
[![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net)

View File

@ -1,4 +1,7 @@
> If you're hiring, you can find [my CV here]({{< ref "cv" >}} )
> If you're hiring, you can [download my CV here](https://s3.badhouseplants.net/public-download/n.rodionov.pdf)
<li href="placeholder.com" target="_blank">download my CV here</a>
I'm a musician and a geek, who works full time as a DevOps engineer, whatever it means. Thanks to my job, I know how to run self-hosted services pretty well, and that's helping me achieve my goal of bringing the indie culture everywhere I can. I'm trying to separate myself from global companies as a user as much as it's possible in my daily life.

View File

@ -21,11 +21,6 @@ draft: false
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=track&amp;id=19"></iframe>
{{< /rawhtml >}}
### Ark
{{< rawhtml >}}
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=track&amp;id=21"></iframe>
{{< /rawhtml >}}
### Silk Road
{{< rawhtml >}}
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=track&amp;id=34"></iframe>
@ -61,11 +56,6 @@ draft: false
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=track&amp;id=28"></iframe>
{{< /rawhtml >}}
### Vicious Shine
{{< rawhtml >}}
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=track&amp;id=36"></iframe>
{{< /rawhtml >}}
### Body Drop
{{< rawhtml >}}
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=track&amp;id=20"></iframe>

View File

View File

@ -0,0 +1,26 @@
---
title: "allanger - Anymore"
date: 2018-12-26T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "/music/allanger-Anymore.jpg"
caption: "Anymore"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- alternative
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/anymore) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/20/)
---
{{< rawhtml >}}
<iframe width="100%" height="100%" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=20"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Anymore.zip)*

View File

@ -0,0 +1,28 @@
---
title: "allanger - Await"
date: 2022-07-01T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "/music/allanger-Await.jpg"
caption: "Await"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- alternative
- hiphop
- rap
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/await) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/26/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=26"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Await.zip)*

View File

@ -0,0 +1,27 @@
---
title: "allanger - Desensitized"
date: 2022-02-06T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "music/allanger-Desensitized.png"
caption: "Desensitized"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- edm
- electronic
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/desensitized) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/22/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=22"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Desensitized.zip)*

View File

@ -0,0 +1,25 @@
---
title: "allanger - Under My Pillow"
date: 2023-05-15T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "/music/allanger-Under_My_Pillow.png"
caption: "Under My Pillow"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- rap
- hiphop
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/under-my-pillow) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/27/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=27"></iframe>{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Under%20My%20Pillow.zip)*

View File

@ -0,0 +1,25 @@
---
title: "allanger - Four Steps Behind"
date: 2023-05-15T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "/music/allanger-Four_Steps_Behind.jpg"
caption: "Four Steps Behind"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- house
- edm
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/four-steps-behind) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/16/)
---
{{< rawhtml >}}
<iframe width="100%" height="350" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=16"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Four%20Steps%20Behind.zip)*

View File

@ -0,0 +1,27 @@
---
title: "allanger - Let Me Kill"
date: 2021-10-15T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "music/allanger-Let_Me_Kill.png"
caption: "Let Me Kill"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- trap
- spoken-word
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/let-me-kill) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/21/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=21"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Let%20Me%20Kill.zip)*

View File

@ -0,0 +1,27 @@
---
title: "allanger - Not Alone"
date: 2022-02-10T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "music/allanger-Not_Alone.png"
caption: "Not Alone"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- edm
- electronic
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/not-alone) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/23/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=23"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Not%20Alone.zip)*

View File

@ -0,0 +1,26 @@
---
title: "allanger - Out Of Law"
date: 2022-01-23T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "music/allanger-Out_of_Law.png"
caption: "Out Of Law"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- punk
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/out-of-law) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/18/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=18"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Out%20Of%20Law.zip)*

View File

@ -0,0 +1,26 @@
---
title: "allanger - Trace"
date: 2023-05-30T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "music/allanger-Trace.png"
caption: "Trace"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- edm
- electronic
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/trace) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/17/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=17"></iframe>{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Trace.zip)*

View File

@ -0,0 +1,26 @@
---
title: "allanger - Wasted Time"
date: 2021-09-23T00:00:00+02:00
draft: false
ShowToc: false
cover:
image: "music/allanger-Waster_Time.png"
caption: "Wasted Time"
relative: false
responsiveImages: false
hideSummary: true
tags:
- music
- release
- indie
- punk
---
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/wasted-time) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/19/)
---
{{< rawhtml >}}
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&amp;type=album&amp;id=19"></iframe>
{{< /rawhtml >}}
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Wasted%20Time.zip)*

View File

@ -0,0 +1,45 @@
# markdown-spellcheck spelling configuration file
# Format - lines beginning # are comments
# global dictionary is at the start, file overrides afterwards
# one word per line, to define a file override use ' - filename'
# where filename is relative to this configuration file
WIP
envs
anymore
hostname
hostnames
Dockerfile
helmfile
k8s
env
dir
dev'n'stages
oi
minio
ArgoCD
setups
SRE
autoscaler
gitea
vendoring
cli
vpa
ok
cmp
config
GitOps
argo
argocding
cluster-1
cluster-2
cluster-3
kubernetes
argocd
helmfiles
plugin
helmfile.yaml
cleanup
serie
backend
js
frontend

View File

View File

@ -13,11 +13,11 @@ cover:
[Do you remember?]({{< ref "dont-use-argocd-for-infrastructure" >}})
> And using `helmfile`, I will install `ArgoCD` to my clusters, of course, because it's an awesome tool, without any doubts. But don't manage your infrastructure with it, because it's a part of your infrastructure, and it's a service that you provide to other teams. And I'll talk about in one of the next posts.
Yes, I have written 4 posts where I was almost absuletely negative about `ArgoCD`. But I was talking about infrastructure then. I've got some ideas about how to describe it in a better way, but I think I will write another post about it.
Yes, I have written 4 posts where I was almost absolutely negative about `ArgoCD`. But I was talking about infrastructure then. I've got some ideas about how to describe it in a better way, but I think I will write another post about it.
Here, I want to talk about dynamic *(preview)* environments, and I'm going to describe how to create them using my blog as an example. My blog is a pretty easy application. From `Kubernetes` perspective, it's just a container with some static content. And here, you already can notice that static is an opposite of dynamic, so it's the first problem that I'll have to tackle. Turning static content into dynamic. So my blog consists of `markdown` files that are used by `hugo` for a web page generation.
>Initially I was using `hugo` server to serve the static, but it needs way more resources than `nginx`, so I've decided in favor of `nginx`.
>Initially I was using `hugo` server to serve the static, but it needs way more resources than `nginx`, so I've decided in favour of `nginx`.
I think that I'll write 2 of 3 posts about it, because it's too much to cover in only one. So here, I'd share how I was preparing my blog to be ready for dynamic environments.
@ -33,7 +33,7 @@ So this is how my workflow looked like before I decided to use dynamic environme
- `Keel` spots that images was updated and pulls it.
- Pod with a static is being recreated, and I have my blog with a new content
What I don't like about it? I can't test something unless it's in `production`. And when I stated to work on adding comments (that is still WIP) I've understood that I'd like to have a real environemnt where I can test everything before firing the main pipeline. Even though having a static development environment would be fine for me, because I'm the only one who do the development here, I don't like the concept of static envs, and I want to be able to work on different posts in the same time. Also, adding a new static environemnt for development purposes it kind of the same amount of work as implementing a solution for deploying them dynamically.
What I don't like about it? I can't test something unless it's in `production`. And when I stated to work on adding comments (that is still WIP) I've understood that I'd like to have a real environment where I can test everything before firing the main pipeline. Even though having a static development environment would be fine for me, because I'm the only one who do the development here, I don't like the concept of static envs, and I want to be able to work on different posts in the same time. Also, adding a new static environment for development purposes it kind of the same amount of work as implementing a solution for deploying them dynamically.
Before I can start deploying them, I have to prepare the application for that. At the first glance changes looks like that:
@ -507,7 +507,7 @@ And then I'm setting an env var `HUGO_PARAMS_GITBRANCH`. And now badge is lookin
## Some kind of conclusion
Even though my application is just a simple blog, I still believe that creating dynamic environments is a great idea that should totally replace static dev'n'stages. And it's not only my blog, I've created dynamic envs for. Two biggest pains *as I think* are `Static content` and `Persistent data` (I think, there are more, but these two are most obvious). I've already shown an example how you can handle the first one, and the second is also a big pain in the ass. In my case this data is the one coming from the `Minio` and I'm not doing anything about it, *but I'll write one more post, when it's solved*, other, in my opinion, more obvious example, are databases. You need it to contain all the data that's required for testing, but you also may want it not to be huge, and it most probably should not contain any sensible personal data. So maybe you could stream a database from the production through some kind of anonymizer, clean it up, so it's not too big. And it doesn't sound easy already. But if I'll have to add something like that to my blog once, I'll try to describe it.
Even though my application is just a simple blog, I still believe that creating dynamic environments is a great idea that should totally replace static dev'n'stages. And it's not only my blog, I've created dynamic envs for. Two biggest pains *as I think* are `Static content` and `Persistent data` (I think, there are more, but these two are most obvious). I've already shown an example how you can handle the first one, and the second is also a big pain in the ass. In my case this data is the one coming from the `Minio` and I'm not doing anything about it, *but I'll write one more post, when it's solved*, other, in my opinion, more obvious example, are databases. You need it to contain all the data that's required for testing, but you also may want it not to be huge, and it most probably should not contain any sensible personal data. So maybe you could stream a database from the production through some kind of anonymiser, clean it up, so it's not too big. And it doesn't sound easy already. But if I'll have to add something like that to my blog once, I'll try to describe it.
Thanks,

View File

@ -65,7 +65,7 @@ But logic would be like this
- Add a new application to the `manifests/$CLUSTER` dir
- Push
- CI/CD
- Since it needs to be `GitOps`, you need to check that charts in the `vendor` dir are up-to-date with `helm-freeze.yaml`. *Because if you updated helm-freeze and forgot to execute `helm-freeze sync`, you will have a contradiction between actual and desired states. That's one of the reasons, why I don't like this kind of vendoring. Either it's an addition step in CI, that is verifying that the manual step was done, or it's an additional work for reviewer. You also can add an action that is going to execute it withing the pipeline and push to your branch, but I'm completely against it. (something for another post maybe)*
- Since it needs to be `GitOps`, you need to check that charts in the `vendor` dir are up-to-date with `helm-freeze.yaml`. *Because if you updated helm-freeze and forgot to execute `helm-freeze sync`, you will have a contradiction between actual and desired states. That's one of the reasons, why I don't like this kind of vendoring. Either it's an addition step in CI, that is verifying that the manual step was done, or it's an additional work for reviewer. You also can add an action that is going to execute it within the pipeline and push to your branch, but I'm completely against it. (something for another post maybe)*
- Then depending on a branch:
- If not `main`
@ -441,7 +441,7 @@ argocd app diff vpa
FATA[0000] rpc error: code = NotFound desc = error getting application: applications.argoproj.io "vpa" not found
```
There is a `--local` option, but it still requires a name ~~(why if there is a name in manfiests 🙃🙃🙃)~~
There is a `--local` option, but it still requires a name ~~(why if there is a name in manifests 🙃🙃🙃)~~
```BASH
# Just testing out
argocd app diff vpa --local ./manifests/cluster2/
@ -543,7 +543,7 @@ Let's try installing apps directly. Remove an app-of-apps from k8s. And let's us
## Conclusion
So you can check the PR here: <https://git.badhouseplants.net/allanger/helmfile-vs-argo/pulls/2/files>
I like that `values` can be handled as normal values files. (But for handling secrets you might have to add a [CMP](https://argo-cd.readthedocs.io/en/stable/user-guide/config-management-plugins/), that means an additional work and maintenance) But even if adding CMP is fine, I couldn't get proper `diffs` for my changes, that means that I can't see what's happening without applying manifests. And applying manifests will mean that other team members will not be work on other tickets withing the same scope, so it looks like a bottleneck to me.
I like that `values` can be handled as normal values files. (But for handling secrets you might have to add a [CMP](https://argo-cd.readthedocs.io/en/stable/user-guide/config-management-plugins/), that means an additional work and maintenance) But even if adding CMP is fine, I couldn't get proper `diffs` for my changes, that means that I can't see what's happening without applying manifests. And applying manifests will mean that other team members will not be work on other tickets within the same scope, so it looks like a bottleneck to me.
But I don't like that you need to add a lot of manifests to manage all the applications. We have only 2 manifests that are copied from folder to folder. So we have a lot of repeating code. And repeating code is never good. So I would write a tool that can let you choose applications from the list of all applications and choose clusters where they need to be deployed. So the config looks like this:
```YAML
@ -565,7 +565,7 @@ But I think that with the whole GitOps pulling concept it will be a hard thing t
I can only say, that I see no profit in using argo like this. It only seems like either a very complicated setup (most probably you will be able to implement anything you need, the question is, how much time will you spend with that), or a ~~crippled~~ not complete setup.
And if you compare an amount of lines that area updadated to install these apps as `Applications` to the helmfile stuff, it's going to be ~100 vs ~30. And that's what I also don't like.
And if you compare an amount of lines that area updated to install these apps as `Applications` to the helmfile stuff, it's going to be ~100 vs ~30. And that's what I also don't like.
In the next post I will try doing the same with `ApplicationSets`, and we'll see, if it looks better or not.

View File

@ -64,7 +64,7 @@ spec:
```
Manifests with a setup like thos have only one values that is really different, so we could create just one manifest that would look like that:
Manifests with a setup like this have only one values that is really different, so we could create just one manifest that would look like that:
```YAML
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
@ -209,7 +209,7 @@ Those applications should be deployed automatically within a pipeline. So steps
- Add new generators
- Sync applications with argocd cli
But I'm not sure what going to happen if you have two different pipelines at the same time. Probably, changes will be overwriten but the pipeline that is a little bit slower. But I think that it can be solved without a lot of additional problems. And also I don't think that it's a situation that you will have to face very often, so you can just rerun your pipeline after all.
But I'm not sure what going to happen if you have two different pipelines at the same time. Probably, changes will be overwritten but the pipeline that is a little bit slower. But I think that it can be solved without a lot of additional problems. And also I don't think that it's a situation that you will have to face very often, so you can just rerun your pipeline after all.
### Diffs
Diffs are not supported for `ApplicationSets` at the moment, and I'm not sure when they will be: <https://github.com/argoproj/argo-cd/issues/10895>

View File

@ -78,7 +78,7 @@ helmfiles:
- path: {{.Environment.Name }}/helmfile.yaml
```
It's going to import helmfiles that are not used across all clusters. So if you want to install something to `cluster-2` accross, you will add it to the `/cluster2/helmfile.yaml` and sync the main helmfile. I will show an example later.
It's going to import helmfiles that are not used across all clusters. So if you want to install something to `cluster-2` across, you will add it to the `/cluster2/helmfile.yaml` and sync the main helmfile. I will show an example later.
So we're all set and ready to begin installing new stuff.
@ -1575,7 +1575,7 @@ Yeah, it's huge, but you can see everything that's going to happen. So I'd say i
It's a short article, because I think the whole setup is super easy, CI is easy too. You still have a full `GitOps` (or almost full) but you also have control. I love this setup and would like to use it for my infrastructure.
Why do I think it's better that `ArgoCD`?
With `ArgoCD` I either have a lot of `yaml` to install things, or I have complicated setups with `ApplicationSets` that are most probably very special and won't be reused in other companies. I need to care about how `ArgoCD` will handle a lot of applications that are added there only for diffing. I need additional applications installed im my clusters not only as a part of infrastructure itself, but also as a service that I'm providing other teams with. Because I want to manage applications that are being developed by other teams with `Argo`, so I'm mixing a lot of different kinds of applications here.
With `ArgoCD` I either have a lot of `yaml` to install things, or I have complicated setups with `ApplicationSets` that are most probably very special and won't be reused in other companies. I need to care about how `ArgoCD` will handle a lot of applications that are added there only for diffing. I need additional applications installed in my clusters not only as a part of infrastructure itself, but also as a service that I'm providing other teams with. Because I want to manage applications that are being developed by other teams with `Argo`, so I'm mixing a lot of different kinds of applications here.
Helmfile lets me separate infra from applications. `ArgoCD` can be only provided as a service, and other teams can use, because it's making k8s easier for those who don't need to understand it so deeply. Also, helmfile lets me use helm-secrets to encrypt values. I can do it with Argo too, but then I need to either have a custom `ArgoCD` image, or support a CMP plugin, that will handle SOPS.

View File

@ -0,0 +1,144 @@
---
title: "Developing a Free Alternative for Splice"
date: 2023-05-31T12:05:44+02:00
draft: true
ShowToc: true
cover:
image: "cover.png"
caption: "Developing a Free Alternative for Splice"
relative: false
responsiveImages: false
---
## Intro
I think that almost everybody knows what **Splice** is. Basically, it's just a huge library of sounds and VST presets with some additional sweets. I can't say that I'm not satisfied by Splice, it's an applications that is doing pretty good, until you want to use it on Linux. That's something that I don't understand, (I'm almost sure that )it's an Electron application with and some binary running a gRPC server in a background, that I believe is written in **GO**. Both technologies are working on Linux, so basically, they could have just built a version without promising any real support for that. But they haven't. I've decided to try running it with WINE, but it didn't work. And then I though: There is awesome [freesound](https://freesound.org/), and why wouldn't I use it?
> Freesound is a collaborative database of Creative Commons Licensed sounds. Browse, download and share sounds.
But downloading samples using a browser it not something I'd like to do. I love Splice for their drag-n-drop app. And I've decided to develop one that will work with Freesound.
## Starting the project
I've decided to use Rust and try the [Iced](https://iced.rs/) for the UI.
Here you will find the project git repository: https://git.badhouseplants.net/allanger/frice
Basically, there are two things to do so the MVP is ready
- Make correct API requests to the Freesound
- Create a UI
So the very first thing that I'm doing, I'm initializing a project and creating a very simple **Iced** app using examples
```bh
cargo init
cargo add iced
```
```toml
# Cargo.toml
[package]
name = "frice"
version = "0.1.0"
edition = "2021"
[dependencies]
iced = "0.9.0"
```
```rust
// ./src/main.rs
use iced::{Sandbox, Settings, widget::Container};
fn main() -> Result<(), iced::Error> {
Frice::run(Settings::default())
}
struct Frice {}
impl Sandbox for Frice {
type Message = String;
fn new() -> Self {
Frice {}
}
fn title(&self) -> String {
"Frice".to_string()
}
fn update(&mut self, message: Self::Message) {
println!("Updating")
}
fn view(&self) -> iced::Element<'_, Self::Message> {
Container::new("frice").center_x().center_y().width(iced::Length::Fill).height(iced::Length::Fill).into() }
}
```
### API
And now I want to switch to the API, because the UI without API requests won't be able to do anything. As I see now, I'll need to implement two API calls for the MVP:
1. Search sounds
2. Download a sound
So let's start with the first one. They have a basic example of searching on their [documentation page](https://freesound.org/docs/api/overview.html)
```bash
curl "https://freesound.org/apiv2/search/text/?query=dogs&token=YOUR_API_KEY"
```
*API key can be created here: <https://freesound.org/apiv2/apply>*
So let's create a FreesoundAPI struct and add two methods there
```rust
struct FreesoundAPI {}
impl FreesoundAPI {
fn new() -> Self {
Self {}
}
fn search() {
todo!()
}
fn download() {
todo!()
}
}
```
To create an API call I'll need a token, so I need to add a new field to the `FreesoundAPI struct`
```rust
struct FreesoundAPI {
token: String
}
impl FreesoundAPI {
fn new(token: String) -> Self {
Self { token }
}
...
}
```
I also need a library for making API calls `cargo add reqwest`
```rust
pub(crate) fn search(&self) {
let client = reqwest::blocking::Client::builder().build().unwrap();
let res = client.get("https://freesound.org/apiv2/search/text")
.query(&[("token", self.token.as_str()), ("query", "dogs")])
.send().unwrap();
println!("{:?}", res.text());
}
```
Let's leave it like this for a moment, and try to implement the `download` method. Freesound API sais that we need to use `Oauth` to download sounds. Let's try.
```bash
cargo add oauth2
```

View File

@ -179,7 +179,7 @@ They are working but there is one UI glitch
Because we probably have different system configs, so maybe it's only possible to reproduce this bug with a set of configs and packages I'm using in my Linux. So if you don't face this issue, lucky you!
It's not very annoying to me, but to avoid this kind of behavior, I can wrap these plugins with **Carla.**
It's not very annoying to me, but to avoid this kind of behaviour, I can wrap these plugins with **Carla.**
![Glitchmachines with Carla](/posts/vst-on-linux-1/glitchmaker-carla.gif)
It's working perfectly with Carla *(it's not that buggy in real life, only on the record)*

View File

@ -117,7 +117,7 @@ But when I add **Filterstep**, Ardour stops responding. I'm sure it's possible t
I was tired after **Audiomodern** plugins, because they were freezing my Ardour and I had to log out and log in again to my system, for Ardour wouldn't run again after that.
But **PaulXStrech** has a native Linux version too, and it has given me a strength to finish with this top.
But **PaulXStretch** has a native Linux version too, and it has given me a strength to finish with this top.
So I'm just installing it with a package manager.

View File

@ -22,7 +22,7 @@ All of them are covered in [the first post]({{< ref "vst-on-linux-1" >}})
## Before we begin
In the previous post, I was trying to run paulxstretch on Linux, and using it as a plugin in a DAW didn't work out. I've tried to update the JUCE library in the source code, and now it's working. You can find the code here: [https://git.badhouseplants.net/badhouseplants/paulxstretch](https://git.badhouseplants.net/badhouseplants/paulxstretch)
In the previous post, I was trying to run PaulXStretch on Linux, and using it as a plugin in a DAW didn't work out. I've tried to update the JUCE library in the source code, and now it's working. You can find the code here: [https://git.badhouseplants.net/badhouseplants/paulxstretch](https://git.badhouseplants.net/badhouseplants/paulxstretch)
To build, refer to the official build doc or use the `/build_docker.sh` script
@ -155,7 +155,7 @@ Downloading a Windows version again.
{{< video "/posts/vst-on-linux-3/eventide-pendulate.mp4" "video-9" >}}
Runnin just fine
Running just fine
As you see, this is a pretty interesting Synth, I have enough of synths for everything, but this one may join the ranks too.
## VCV Rack 👍
@ -174,9 +174,9 @@ I didn't have enough time to learn it yet, so that's what I could do with it
Protoverb is a reverb created by u-he. It has native Linux support
Download the **Linux** version and install it by running a script. You can finfd everything [here](https://u-he.com/products/protoverb/)
Download the **Linux** version and install it by running a script. You can find everything [here](https://u-he.com/products/protoverb/)
## Paulstretch 👍
## PaulXStretch 👍
It's already covered in the previous article. But since then, one thing is changed. You could've seen it in the very beginning of the post, that I've updated JUCE library in the source code, and now it's running as a VST plugin. If you missed it, try reading the beginning one more time.

View File

@ -0,0 +1 @@
<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>

View File

@ -1,7 +1,4 @@
<hr>
<blockquote>
<p> Comments are in the beta testing stage. </p>
</blockquote>
<div id="remark42"></div>
<script>

BIN
src/static/music/allanger-Await.jpg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
src/static/music/allanger-Desensitized.png (Stored with Git LFS) Executable file

Binary file not shown.

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2def9a412cba612ccf55cc39deeb82f971418ad27119c93d63844c7c25bc0748
size 2045790

BIN
src/static/music/allanger-Not_Alone.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
src/static/music/allanger-Trace.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
src/static/music/allanger-Under_My_Pillow.png (Stored with Git LFS) Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More