Skip to content

Commit

Permalink
initial release
Browse files Browse the repository at this point in the history
  • Loading branch information
pscheid92 committed Jan 21, 2024
0 parents commit 9709a11
Show file tree
Hide file tree
Showing 127 changed files with 5,461 additions and 0 deletions.
46 changes: 46 additions & 0 deletions .github/workflows/pipeline.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#
name: Create and publish a Docker image

on:
push:
branches: ['main']

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Log into Github registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,format=long
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: deployment/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
public
Empty file added .hugo_build.lock
Empty file.
6 changes: 6 additions & 0 deletions archetypes/default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

86 changes: 86 additions & 0 deletions assets/css/extended/codestyle.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/* Background */ .bg { color: #f8f8f2; background-color: #000000; }
/* PreWrapper */ .chroma { color: #f8f8f2; background-color: #000000; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { }
/* CodeLine */ .chroma .cl { }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7c7c79 }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7c7c79 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #ff0000 }
/* KeywordConstant */ .chroma .kc { color: #ff0000 }
/* KeywordDeclaration */ .chroma .kd { color: #ff0000 }
/* KeywordNamespace */ .chroma .kn { color: #ff0000 }
/* KeywordPseudo */ .chroma .kp { color: #ff0000 }
/* KeywordReserved */ .chroma .kr { color: #ff0000 }
/* KeywordType */ .chroma .kt { color: #ee82ee }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { }
/* NameBuiltin */ .chroma .nb { }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { }
/* NameConstant */ .chroma .no { color: #7fffd4 }
/* NameDecorator */ .chroma .nd { }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { }
/* NameFunction */ .chroma .nf { color: #ffff00 }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { }
/* NameNamespace */ .chroma .nn { }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { }
/* NameTag */ .chroma .nt { }
/* NameVariable */ .chroma .nv { color: #eedd82 }
/* NameVariableClass */ .chroma .vc { }
/* NameVariableGlobal */ .chroma .vg { }
/* NameVariableInstance */ .chroma .vi { }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #87ceeb }
/* LiteralStringAffix */ .chroma .sa { color: #87ceeb }
/* LiteralStringBacktick */ .chroma .sb { color: #87ceeb }
/* LiteralStringChar */ .chroma .sc { color: #87ceeb }
/* LiteralStringDelimiter */ .chroma .dl { color: #87ceeb }
/* LiteralStringDoc */ .chroma .sd { color: #87ceeb }
/* LiteralStringDouble */ .chroma .s2 { color: #87ceeb }
/* LiteralStringEscape */ .chroma .se { color: #87ceeb }
/* LiteralStringHeredoc */ .chroma .sh { color: #87ceeb }
/* LiteralStringInterpol */ .chroma .si { color: #87ceeb }
/* LiteralStringOther */ .chroma .sx { color: #87ceeb }
/* LiteralStringRegex */ .chroma .sr { color: #87ceeb }
/* LiteralStringSingle */ .chroma .s1 { color: #87ceeb }
/* LiteralStringSymbol */ .chroma .ss { color: #ff6600 }
/* LiteralNumber */ .chroma .m { color: #ff6600 }
/* LiteralNumberBin */ .chroma .mb { color: #ff6600 }
/* LiteralNumberFloat */ .chroma .mf { color: #ff6600 }
/* LiteralNumberHex */ .chroma .mh { color: #ff6600 }
/* LiteralNumberInteger */ .chroma .mi { color: #ff6600 }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ff6600 }
/* LiteralNumberOct */ .chroma .mo { color: #ff6600 }
/* Operator */ .chroma .o { }
/* OperatorWord */ .chroma .ow { }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #00ff00 }
/* CommentHashbang */ .chroma .ch { color: #00ff00 }
/* CommentMultiline */ .chroma .cm { color: #00ff00 }
/* CommentSingle */ .chroma .c1 { color: #00ff00 }
/* CommentSpecial */ .chroma .cs { color: #00ff00 }
/* CommentPreproc */ .chroma .cp { color: #e5e5e5 }
/* CommentPreprocFile */ .chroma .cpf { color: #e5e5e5 }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { }
/* GenericEmph */ .chroma .ge { }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { }
/* GenericSubheading */ .chroma .gu { }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }
12 changes: 12 additions & 0 deletions assets/css/extended/profile-page-description.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.profile-introduction {
margin: auto;
padding-top: 1em;
text-align: justify;
text-align-last: left;
}

@media only screen and (min-width: 600px) {
.profile-introduction {
width: 600px;
}
}
11 changes: 11 additions & 0 deletions assets/css/extended/theme-var-overwrites.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
:root {
--main-width: var(--nav-width);
}

.chroma .lnt {
color: #fff;
}

.chroma .ln {
color: #fff;
}
135 changes: 135 additions & 0 deletions config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
baseURL: "https://patrickscheid.de"
title: "Patrick Scheid"
paginate: 5
theme: PaperMod

enableRobotsTXT: true
buildDrafts: false
buildFuture: false
buildExpired: false

minify:
disableXML: true
minifyOutput: true

params:
env: production
title: Patrick Scheid
description: >
Patrick Scheid, experienced people-focused, product-minded backend developer in Munich.
Leveraging a background as a Product Owner and Scrum Master for comprehensive tech solutions.
keywords: [Blog, Portfolio, PaperMod]
DateFormat: "January 2, 2006"
defaultTheme: auto
disableThemeToggle: false
mainSections:
- posts

ShowReadingTime: true
ShowShareButtons: false
ShowPostNavLinks: true
ShowBreadCrumbs: false
ShowCodeCopyButtons: true
disableSpecial1stPost: false
disableScrollToTop: false
comments: false
hidemeta: false
hideSummary: false
showtoc: false
tocopen: false

schema:
publisherType: Person

assets:
disableHLJS: true
favicon: "favicon.ico"
favicon16x16: "favicon.ico"
favicon32x32: "favicon.ico"
apple_touch_icon: "favicon.ico"
safari_pinned_tab: "favicon.ico"

label:
text: "Home"

profileMode:
enabled: true
title: Patrick Scheid
subtitle: |
**Software Engineer**
**People-Centric & Product-Minded**
introduction: |
{{< rawhtml >}}
<div class="profile-introduction">
I'm a software engineer specialised in backend development.
With my experience as a Product Owner, Scrum Master, and Data Scientist, I bring a unique perspective to software development.
Based in Munich, I'm passionate about building solutions that add real value to customers.
</div>
{{< /rawhtml >}}
imageUrl: "avatar-20220921-173622.webp"
imageWidth: 240
imageHeight: 240
imageTitle: Avatar

socialIcons:
- name: stackoverflow
url: "https://stackoverflow.com/users/3533066/pscheid"
- name: github
url: "https://github.com/pscheid92"
- name: linkedin
url: "https://www.linkedin.com/in/pscheid92/"
- name: email
url: "mailto:[email protected]"

cover:
hidden: true
hiddenInList: true
hiddenInSingle: true

# for search
# https://fusejs.io/api/options.html
fuseOpts:
isCaseSensitive: false
shouldSort: true
location: 0
distance: 1000
threshold: 0.4
minMatchCharLength: 0
keys: ["title", "permalink", "summary", "content"]

menu:
main:
- identifier: search
name: Search
url: /search/
weight: 10
- identifier: about
name: About
url: /about/
weight: 20
- identifier: cv
name: CV
url: /cv-20230411.pdf
weight: 30
- identifier: posts
name: Posts
url: /posts/
weight: 40

outputs:
home:
- HTML
- RSS
- JSON

# Read: https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#using-hugos-syntax-highlighter-chroma
markup:
highlight:
noClasses: false
codeFences: true
guessSyntax: true
lineNos: true
17 changes: 17 additions & 0 deletions content/about.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: "About Me"
summary: "about"
placeholder: "Information about me and my CV ..."
---
I am an experienced software developer and leader from Munich.
As a backend developer I'm passionat about developing systems that solve complex problems and deliver real value to customers.

With my experience as a Product Owner, Scrum Master, Data Scientist and Team Lead, I deeply understand software development aspects beyond pure technology.

My true passion is for people! Effective communication, autonomy and a holistic systemic-constructivist view are essential for building successful software solutions.

A strong team with an aspiration for self-improvement is a prerequisite for success. I want to keep learning and growing personally and professionally, and I want to help my team and company do the same.

With my experience in software development and focus on customer needs, I am always looking for ways to innovate and improve.

If you are looking for an experienced software developer and a leader for whom people are more important than technologies and want to add real value to their customers, then we should talk!
61 changes: 61 additions & 0 deletions content/posts/ngrok-and-gin-gonic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
title: Using ngrok-go with gin-gonic
desciption: an article showing how to combine gin-gonic and ngrok-go to expose your local http server via ngrok to the public internet.
---

In this brief tutorial, we're going to discuss how to utilize the newly released [ngrok-go](https://ngrok.com/blog-post/ngrok-go) library alongside `gin-gonic`. The `ngrok-go` library provides a way to expose local servers to the internet, which can be highly beneficial during development and testing phases. On the other hand, `gin-gonic` is a highly-regarded web framework for building APIs in Go, recognized for its minimalistic design and excellent performance. When combined, these tools can significantly enhance the efficiency of your web application development process.

```go
// define an endpoint /now that returns the current time.
r := gin.Default()
r.GET("/now", func(c *gin.Context) {
response := gin.H{"time": time.Now()}
c.JSON(http.StatusOK, response)
})

// We instruct ngrok to listen to our application.
// The 'config.HttpEndpoint' allows us how ngrok exposes our application.
// The result of `ngrok.Listen(...)` implements the net.Listener interface.
ctx := context.Background()
listener, err := ngrok.Listen(ctx, config.HTTPEndpoint())
if err != nil {
log.Fatalln(err)
}

// We log the ngrok address, which serves as the address to access your local server from the internet.
log.Printf("public address: %s\n", listener.Addr())

// We start the gin application with the ngrok listener.
// This fires up the gin server and makes it accessible through the ngrok address.
if err := r.RunListener(listener); err != nil {
log.Fatalln(err)
}
```

After booting up the server locally, follow these steps to access it via the ngrok address:

1. Copy the address output by `listener.Addr()`. This is the ngrok address that you can use to access your local server from the internet.
2. Run your local server using the command `go run .`. This initiates your gin server.
3. You can now access your server by sending a request to the ngrok address. In the example below, we use the 'https' command to send a GET request to the '/now' endpoint of our server.

```shell
$ GIN_MODE=release go run .
2023/05/20 17:56:19 public address: fee6-2003-dc-d740-7394-7c9a-a007-80fa-b617.eu.ngrok.io
[GIN] 2023/05/20 - 17:56:33 | 200 | 29.583µs | 2001:dc:e741:7394:7c9a:a018:80fa:b617 | GET "/now"
```

When you send a request to your server, you should receive a JSON response similar to this
```shell
$ https fee6-2003-dc-d740-7394-7c9a-a007-80fa-b617.eu.ngrok.io/now

HTTP/1.1 200 OK
Content-Length: 43
Content-Type: application/json; charset=utf-8
Date: Sat, 20 May 2023 15:56:33 GMT
Ngrok-Agent-Ips: 2003:dc:d740:7394:7c9a:a007:80fa:b617
Ngrok-Trace-Id: f8919710b6a082c85e69836ee251a02a

{
"time": "2023-05-20T17:56:33.807461+02:00"
}
```
7 changes: 7 additions & 0 deletions content/search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: "Search"
layout: "search"
summary: "search"
placeholder: "Search for a blog article ..."
searchHidden: true
---
Loading

0 comments on commit 9709a11

Please sign in to comment.