-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
120 changed files
with
56,881 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
--- | ||
layout: default | ||
title: 404 | ||
hide-in-nav: true | ||
description: "Sorry, this page does not exist :(" | ||
header-img: "img/404-bg.jpg" | ||
permalink: /404.html | ||
--- | ||
|
||
|
||
<!-- Page Header --> | ||
{% include intro-header.html type="page" short='true' %} | ||
|
||
<script> | ||
document.body.classList.add('page-fullscreen'); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
maltequast.de |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
module.exports = function(grunt) { | ||
|
||
// Project configuration. | ||
grunt.initConfig({ | ||
pkg: grunt.file.readJSON('package.json'), | ||
uglify: { | ||
main: { | ||
src: 'js/<%= pkg.name %>.js', | ||
dest: 'js/<%= pkg.name %>.min.js' | ||
} | ||
}, | ||
less: { | ||
expanded: { | ||
options: { | ||
paths: ["css"] | ||
}, | ||
files: { | ||
"css/<%= pkg.name %>.css": "less/<%= pkg.name %>.less" | ||
} | ||
}, | ||
minified: { | ||
options: { | ||
paths: ["css"], | ||
cleancss: true | ||
}, | ||
files: { | ||
"css/<%= pkg.name %>.min.css": "less/<%= pkg.name %>.less" | ||
} | ||
} | ||
}, | ||
banner: '/*!\n' + | ||
' * <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n' + | ||
' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + | ||
' */\n', | ||
usebanner: { | ||
dist: { | ||
options: { | ||
position: 'top', | ||
banner: '<%= banner %>' | ||
}, | ||
files: { | ||
src: ['css/<%= pkg.name %>.css', 'css/<%= pkg.name %>.min.css', 'js/<%= pkg.name %>.min.js'] | ||
} | ||
} | ||
}, | ||
watch: { | ||
scripts: { | ||
files: ['js/<%= pkg.name %>.js'], | ||
tasks: ['uglify'], | ||
options: { | ||
spawn: false, | ||
}, | ||
}, | ||
less: { | ||
files: ['less/*.less'], | ||
tasks: ['less'], | ||
options: { | ||
spawn: false, | ||
} | ||
}, | ||
}, | ||
}); | ||
|
||
// Load the plugins. | ||
grunt.loadNpmTasks('grunt-contrib-uglify'); | ||
grunt.loadNpmTasks('grunt-contrib-less'); | ||
grunt.loadNpmTasks('grunt-banner'); | ||
grunt.loadNpmTasks('grunt-contrib-watch'); | ||
|
||
// Default task(s). | ||
grunt.registerTask('default', ['uglify', 'less', 'usebanner']); | ||
|
||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
require "rubygems" | ||
require 'rake' | ||
require 'yaml' | ||
require 'time' | ||
|
||
SOURCE = "." | ||
CONFIG = { | ||
'version' => "12.3.2", | ||
'themes' => File.join(SOURCE, "_includes", "themes"), | ||
'layouts' => File.join(SOURCE, "_layouts"), | ||
'posts' => File.join(SOURCE, "_posts"), | ||
'post_ext' => "md", | ||
'theme_package_version' => "0.1.0" | ||
} | ||
|
||
# Usage: rake post title="A Title" subtitle="A sub title" | ||
desc "Begin a new post in #{CONFIG['posts']}" | ||
task :post do | ||
abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts']) | ||
title = ENV["title"] || "new-post" | ||
subtitle = ENV["subtitle"] || "This is a subtitle" | ||
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') | ||
begin | ||
date = (ENV['date'] ? Time.parse(ENV['date']) : Time.now).strftime('%Y-%m-%d') | ||
rescue Exception => e | ||
puts "Error - date format must be YYYY-MM-DD, please check you typed it correctly!" | ||
exit -1 | ||
end | ||
filename = File.join(CONFIG['posts'], "#{date}-#{slug}.#{CONFIG['post_ext']}") | ||
if File.exist?(filename) | ||
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n' | ||
end | ||
|
||
puts "Creating new post: #{filename}" | ||
open(filename, 'w') do |post| | ||
post.puts "---" | ||
post.puts "layout: post" | ||
post.puts "title: \"#{title.gsub(/-/,' ')}\"" | ||
post.puts "subtitle: \"#{subtitle.gsub(/-/,' ')}\"" | ||
post.puts "date: #{date}" | ||
post.puts "author: \"Hux\"" | ||
post.puts "header-img: \"img/post-bg-2015.jpg\"" | ||
post.puts "tags: []" | ||
post.puts "---" | ||
end | ||
end # task :post | ||
|
||
desc "Launch preview environment" | ||
task :preview do | ||
system "jekyll --auto --server" | ||
end # task :preview | ||
|
||
#Load custom rake scripts | ||
Dir['_rake/*.rake'].each { |r| load r } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,7 @@ | |
title: Maltes ML Blog | ||
SEOTitle: Maltes ML Blog | Maltes Blog | ||
header-img: img/about-bg.jpg | ||
email: [email protected] | ||
email: [email protected] | ||
description: "Maltes Blog | Machine Learning, Automation, MLOps, Python | Datadrivers" | ||
keyword: "Machine Learning, Deep Learning, Pytest, Python, Automation, Cloud" | ||
url: "https://malte.quast.de" # your host, for absolute URL | ||
|
@@ -76,7 +76,7 @@ kramdown: | |
|
||
# Sidebar settings | ||
sidebar: true # whether or not using Sidebar. | ||
sidebar-about-description: "Always asking myself - What's the key to success as a Data Scientist?" | ||
sidebar-about-description: "Data Scientist on the way to automate ML" | ||
sidebar-avatar: https://avatars.githubusercontent.com/u/40795540?s=400&u=61b6b9370a6d0c1b9bd11eaa47ce8a1ec4c51d8c&v=4 # use absolute URL, seeing it's used in both `/` and `/about/` | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
I am a Malte, a Senior Data Scientist with a focus on computer vision and time series analysis. | ||
I am also very interested in MLOps and enjoy getting my hands dirty with code. I have started and ran my own business, | ||
so I have a lot of experience working on innovative projects. In addition to all this, I studied business administration | ||
in University, so I have a strong foundation in the basics of business. | ||
|
||
## Recent Projects | ||
|
||
--- | ||
July 2022 - Present | Senior Data Scientist | Datadrivers GmbH | ||
|
||
[5] Working on Recommender Systems in the AWS Cloud. Mainly focusing on the use of Amazon SageMaker and AWS Glue for | ||
postprocessing tasks. | ||
|
||
--- | ||
May 2021 - June 2022 | Data Scientist | Datadrivers GmbH | ||
|
||
[4] We have developed a temporal | ||
fusion transformer, which is used for multivariate time series analysis and demand quantity prediction. | ||
This project was a great experience for me, due to the size of the data and the fact how to create a | ||
data driven pipeline with PubSub, Dataflow and Tensorflow. | ||
|
||
--- | ||
January 2020 - June 2022 | Data Scientist | Datadrivers GmbH | ||
|
||
[3] In a recent project with 60,000 product descriptions that I have processed through a full spacy data pipeline, | ||
including GCP Cloud Run jobs. I | ||
have also developed an Annoy Index for similarity scores and processed these data to a Streamlit application. | ||
|
||
[3] I have 40,000 images that I have processed through a full data pipeline, including GCP, Tensorflow, and Dataflow. | ||
Additionally to this setup I have used a pretrained MobileNetV2 and Streamlit applications as the WebUI. | ||
|
||
[2] In this project, we have used a Thompson Sampler (Multi armed bandit) to automate the frequency of ads for a | ||
Google Cloud Platform customer. We built a model that predicts which ads frequency will be most effective for a given customer, then used | ||
Airflow to run the model on Google's infrastructure. The end result was a significant increase in ad click-through rates and an overall | ||
improvement in customer satisfaction. | ||
|
||
|
||
--- | ||
Before January 2020 | Data Analytics Consultant | Datadrivers GmbH | ||
|
||
[1] During this time I deepened my knowledge in the field of neural networks. A wide variety of technologies and | ||
libraries were used to achieve this goal. Using GPUs, various problems could be solved and optimized using PyTorch and | ||
Tensorflow. | ||
Additionally I have created several Datawarehouse projects in the Cloud and on-prem. | ||
A larger selection of projects can be found in the Github repository. | ||
|
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> | ||
<!-- first shot --> | ||
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6487568398225121" data-ad-slot="4814308751" | ||
data-ad-format="auto" data-full-width-responsive="true"></ins> | ||
<script> | ||
(adsbygoogle = window.adsbygoogle || []).push({}); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
{% comment %} | ||
@param {boolean} bottom - bottom will render <hr> | ||
{% endcomment %} | ||
|
||
{% if site.featured-tags %} | ||
<section> | ||
{% if include.bottom %} | ||
<hr class="hidden-sm hidden-xs"> | ||
{% endif %} | ||
<h5><a href="{{'/archive/' | prepend: site.baseurl }}">FEATURED TAGS</a></h5> | ||
<div class="tags"> | ||
{% capture tags %} | ||
{% comment %} | ||
there must be no space between for and if otherwise this tricky sort won't work. | ||
url_encode/decode is for escaping otherwise extra <a> will get generated | ||
but it will break sort... | ||
{% endcomment %} | ||
{% for tag in site.tags %}{% if tag[1].size > site.featured-condition-size %} | ||
<a data-sort="{{ site.posts.size | minus: tag[1].size | prepend: '0000' | slice: -4, 4 }}" | ||
href="{{ site.baseurl }}/archive/?tag={{ tag[0] | url_encode }}" | ||
title="{{ tag[0] }}" | ||
rel="{{ tag[1].size }}">{{ tag[0] }}</a>__SEPARATOR__ | ||
{% endif %}{% endfor %} | ||
{% endcapture %} | ||
{{ tags | split:'__SEPARATOR__' | sort }} | ||
</div> | ||
</section> | ||
{% endif %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{% if site.friends %} | ||
<hr> | ||
<h5>FRIENDS</h5> | ||
<ul class="list-inline"> | ||
{% for friend in site.friends %} | ||
<li><a href="{{friend.href}}">{{friend.title}}</a></li> | ||
{% endfor %} | ||
</ul> | ||
{% endif %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
{% comment %} | ||
@param {string} type - 'page' | 'post' | 'keynote' | ||
@param {boolean} short | ||
{% endcomment %} | ||
|
||
{% if include.type == 'post' %} | ||
<style type="text/css"> | ||
header.intro-header{ | ||
position: relative; | ||
background-image: url('{{ site.baseurl }}/{% if page.header-img %}{{ page.header-img }}{% else %}{{ site.header-img }}{% endif %}'); | ||
background: {{ page.header-bg-css }}; | ||
} | ||
|
||
{% if page.header-mask %} | ||
header.intro-header .header-mask{ | ||
width: 100%; | ||
height: 100%; | ||
position: absolute; | ||
background: rgba(0,0,0, {{ page.header-mask }}); | ||
} | ||
{% endif %} | ||
</style> | ||
{% if page.header-style == 'text' %} | ||
<header class="intro-header style-text" > | ||
{% else %} | ||
<header class="intro-header" > | ||
{% endif %} | ||
<div class="header-mask"></div> | ||
{% if page.header-img-credit %} | ||
<div class="header-img-credit"> | ||
Image by <a href="//{{page.header-img-credit-href}}">{{page.header-img-credit}}</a> | ||
</div> | ||
{% endif %} | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> | ||
<div class="post-heading"> | ||
<div class="tags"> | ||
{% for tag in page.tags %} | ||
<a class="tag" href="{{ site.baseurl }}/archive/?tag={{ tag | url_encode }}" title="{{ tag }}">{{ tag }}</a> | ||
{% endfor %} | ||
</div> | ||
<h1>{{ page.title }}</h1> | ||
{% comment %} always create a h2 for keeping the margin {% endcomment %} | ||
<h2 class="subheading">{{ page.subtitle }}</h2> | ||
<span class="meta">Posted by {% if page.author %}{{ page.author }}{% else %}{{ site.title }}{% endif %} on {{ page.date | date: "%B %-d, %Y" }}</span> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</header> | ||
{% endif %} | ||
|
||
{% if include.type == 'keynote' %} | ||
<style type="text/css"> | ||
header.intro-header{ | ||
height: 500px; | ||
overflow: hidden; | ||
} | ||
header.intro-header .container{ | ||
visibility: hidden; | ||
} | ||
header iframe{ | ||
width: 100%; | ||
height: 100%; | ||
border: 0; | ||
} | ||
</style> | ||
<header class="intro-header" > | ||
<iframe src="{{page.iframe}}"></iframe> | ||
<!-- keep for SEO --> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> | ||
<div class="post-heading"> | ||
<div class="tags"> | ||
{% for tag in page.tags %} | ||
<a class="tag" href="{{ site.baseurl }}/archive/?tag={{ tag | url_encode }}" title="{{ tag }}">{{ tag }}</a> | ||
{% endfor %} | ||
</div> | ||
<h1>{{ page.title }}</h1> | ||
{% comment %} always create a h2 for keeping the margin {% endcomment %} | ||
<h2 class="subheading">{{ page.subtitle }}</h2> | ||
<span class="meta">Posted by {% if page.author %}{{ page.author }}{% else %}{{ site.title }}{% endif %} | ||
on {{ page.date | date: "%B %-d, %Y" }}</span> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</header> | ||
{% endif %} | ||
|
||
{% if include.type == 'page' %} | ||
<header class="intro-header" style="background-image: url('{{ site.baseurl }}/{% if page.header-img %}{{ page.header-img }}{% else %}{{ site.header-img }}{% endif %}')"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> | ||
{% if include.short %} | ||
<div class="site-heading" id="tag-heading"> | ||
{% else %} | ||
<div class="site-heading"> | ||
{% endif %} | ||
<h1>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</h1> | ||
<span class="subheading">{{ page.description }}</span> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</header> | ||
{% endif %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
<script type="text/x-mathjax-config"> | ||
MathJax.Hub.Config({ | ||
TeX: { | ||
equationNumbers: { | ||
autoNumber: "AMS" | ||
} | ||
}, | ||
SVG: { | ||
scale: 90 | ||
}, | ||
tex2jax: { | ||
inlineMath: [ ['$','$'] ], | ||
displayMath: [ ['$$','$$'] ], | ||
processEscapes: true, | ||
} | ||
}); | ||
</script> | ||
<script type="text/javascript" | ||
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"> | ||
</script> |
Oops, something went wrong.